锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产一精品一av一免费爽爽,日本强好片久久久久久aaa,一本一道久久a久久综合精品http://www.aygfsteel.com/yuoveyu/category/45393.html灝忓皬紼嬪簭鍛?/description>zh-cnMon, 21 Jun 2010 02:29:15 GMTMon, 21 Jun 2010 02:29:15 GMT60[婧愮爜瀛︿範]Tomcat6 婧愮爜瀛︿範http://www.aygfsteel.com/yuoveyu/archive/2010/06/21/324046.html浣欏潥浣欏潥Mon, 21 Jun 2010 02:28:00 GMThttp://www.aygfsteel.com/yuoveyu/archive/2010/06/21/324046.htmlhttp://www.aygfsteel.com/yuoveyu/comments/324046.htmlhttp://www.aygfsteel.com/yuoveyu/archive/2010/06/21/324046.html#Feedback0http://www.aygfsteel.com/yuoveyu/comments/commentRss/324046.htmlhttp://www.aygfsteel.com/yuoveyu/services/trackbacks/324046.html 2010-3-29
銆恡omcat鍚姩綾籅ootstrap銆?
t1.tomcat鐨勪漢鍙e嚱鏁幫紝鍚姩綾?
org.apache.catalina.startup. Bootstrap.java   Main鍑芥暟

t2.Bootstrap綾?
鍒濆鍖?ClassLoader, 鐒跺悗鍒╃敤 Java Reflection 璋冪敤 Catalina 綾繪潵鍚姩 tomcat server

銆恡omcat鎵╁睍-鏃ュ織銆?
a1.private static Log log = LogFactory.getLog(Bootstrap.class);
鏃ュ織鍙互瀹氫箟涓簆rivate 鍜宻tatic

a2.鍙湪鏈被涓嬌鐢ㄧ殑鏂規硶,浣跨敤private,闄嶄綆璁塊棶鏉冮檺,闇瑕佺殑鏃跺?鍐嶈冭檻閲嶆瀯鎴栬呮彁楂樿闂潈闄恜ublic

a.鏃ュ織鎵撳嵃鍓嶅姞if(log.isInfoEnabled())
濡傛灉浠g爜涓惈鏈塴ogger.debug(“string”);姝ょ被璇彞錛屽敖綆″湪log4j.xml閰嶇疆鏂囦歡涓璇ョ被logger鐨刲evel涓? ERROR錛屼絾鏄粛鐒朵細浜х敓杈冨ぇ鐨勫唴瀛樺紑閿錛岄氬父鏄墍瑕佽緭鍑虹殑string鐨勫嚑鍗佸嶇敋鑷充笂鐧懼嶅ぇ灝忥紝瀵瑰唴瀛樺紑閿闈炲父澶с備紭鍖栨柟娉曚負錛氫嬌鐢╨ogger榪涜 鍒ゆ柇銆?


2010-3-30
銆恡omcat鎵╁睍-classloader銆?
a3.濡傛灉涓や釜綾誨睘浜庡悓涓涓寘涓嬶紝浣嗘槸鐢變笉鍚岀殑classloader鍔犺澆錛岄偅涔堜粬浠篃涓嶈兘浜掕default綾誨瀷鏂規硶,灞炴?

a4.classloader:涓嶤鎴朇++緙栧啓鐨勭▼搴忎笉鍚岋紝Java紼嬪簭騫朵笉鏄竴涓彲鎵ц鏂囦歡錛岃屾槸鐢辮澶氱嫭绔嬬殑綾繪枃浠剁粍鎴愶紝姣忎竴涓枃浠跺熀鏈笂 瀵瑰簲浜庝竴涓被銆傛澶栵紝榪欎簺綾繪枃浠跺茍闈炵珛鍗沖叏閮ㄩ兘瑁呭叆鍐呭瓨錛岃屾槸鏍規嵁紼嬪簭闇瑕佽鍏ュ唴瀛樸侰lassLoader鏄疛VM涓皢綾昏鍏ュ唴瀛樼殑閭i儴鍒?

a5.瀹氬埗鐨凜lassLoader搴旂敤:
1.鍦ㄦ墽琛岄潪緗俊浠g爜涔嬪墠錛岃嚜鍔ㄩ獙璇佹暟瀛楃鍚?
2.浣跨敤鐢ㄦ埛鎻愪緵鐨勫瘑鐮侀忔槑鍦拌В瀵嗕唬鐮?
3.鍔ㄦ佸湴鍒涘緩絎﹀悎鐢ㄦ埛鐗瑰畾闇瑕佺殑瀹氬埗鍖栨瀯寤虹被
4.浠諱綍鎮ㄨ涓哄彲浠ョ敓鎴怞ava瀛楄妭鐮佺殑鍐呭閮藉彲浠ラ泦鎴愬埌搴旂敤紼嬪簭涓?

a6.findClass鏂規硶鏄垱寤哄畾鍒剁殑ClassLoader鏃跺敮涓闇瑕佽鐩栫殑鏂規硶銆?
ClassLoader loadClass鏂規硶
Class c = findLoadedClass(name);
if (c == null) {
    try {
if (parent != null) {
    c = parent.loadClass(name, false);
} else {
    c = findBootstrapClass0(name);
}
    } catch (ClassNotFoundException e) {
        // If still not found, then invoke findClass in order
        // to find the class.
        c = findClass(name);
    }
}

a7.ClassLoader(CCL)鐨勪換鍔℃槸紜繚浠g爜琚紪璇戝拰鏇存柊銆?
涓嬮潰鎻忚堪浜嗗畠鐨勫伐浣滄柟寮忥細1銆佸綋璇鋒眰涓涓被鏃訛紝鍏堟煡鐪嬪畠鏄惁鍦ㄧ鐩樼殑褰撳墠鐩綍鎴栫浉搴旂殑瀛愮洰褰曘?
2銆佸鏋滆綾諱笉瀛樺湪錛屼絾婧愮爜涓湁錛岄偅涔堣皟鐢↗ava緙栬瘧鍣ㄦ潵鐢熸垚綾繪枃浠躲?
3銆佸鏋滆綾誨凡瀛樺湪錛屾鏌ュ畠鏄惁姣旀簮鐮佹棫銆傚鏋滄槸錛岃皟鐢↗ava緙栬瘧鍣ㄦ潵閲嶆柊鐢熸垚綾繪枃浠躲?
4銆佸鏋滅紪璇戝け璐ワ紝鎴栬呯敱浜庡叾瀹冨師鍥犱笉鑳戒粠鐜版湁鐨勬簮鐮佷腑鐢熸垚綾繪枃浠訛紝榪斿洖ClassNotFoundException銆?
5銆佸鏋滀粛鐒舵病鏈夎綾伙紝涔熻瀹冨湪鍏跺畠搴撲腑錛屾墍浠ヨ皟鐢╢indSystemClass鏉ュ鎵捐綾匯?
6銆佸鏋滆繕鏄病鏈夛紝鍒欒繑鍥濩lassNotFoundException銆?
7銆佸惁鍒欙紝榪斿洖璇ョ被銆?
8銆佽皟鐢╢indLoadedClass鏉ユ煡鐪嬫槸鍚﹀瓨鍦ㄥ凡瑁呭叆鐨勭被銆?
9銆佸鏋滄病鏈夛紝閭d箞閲囩敤閭g鐗規畩鐨勭濂囨柟寮忔潵鑾峰彇鍘熷瀛楄妭銆?
10銆佸鏋滃凡鏈夊師濮嬪瓧鑺傦紝璋冪敤defineClass灝嗗畠浠漿鎹㈡垚Class瀵硅薄銆?
11銆佸鏋滄病鏈夊師濮嬪瓧鑺傦紝鐒跺悗璋冪敤findSystemClass鏌ョ湅鏄惁浠庢湰鍦版枃浠剁郴緇熻幏鍙栫被銆?
12銆佸鏋渞esolve鍙傛暟鏄痶rue錛岄偅涔堣皟鐢╮esolveClass瑙f瀽Class瀵硅薄銆?
13銆佸鏋滆繕娌℃湁綾伙紝榪斿洖ClassNotFoundException銆?
14銆佸惁鍒欙紝灝嗙被榪斿洖緇欒皟鐢ㄧ▼搴忋?

銆恡omcat鍚姩綾籧lassloader銆?
t3.tomcat鑷畾涔変簡涓変釜綾伙紝catalinaLoader commonLoader錛宻haredLoader
Common - 杞藉叆$CATALINA_HOME/common/...瀹冧滑瀵筎OMCAT鍜屾墍鏈夌殑WEB APP閮藉彲瑙?
Catalina - 杞藉叆$CATALINA_HOME/server/..瀹冧滑浠呭TOMCAT鍙錛屽鎵鏈夌殑WEB APP閮戒笉鍙
Shared-杞藉叆$CATALINA_HOME/shared/瀹冧滑浠呭鎵鏈塛EB APP鍙,瀵筎OMCAT涓嶅彲瑙侊紙涔熶笉蹇呰錛?

t4.Bootstrap閫氳繃鍙嶅皠鍒濆鍖朇atalina綾伙紝
鍙嶅皠璋冪敤Catalina鏂規硶setParentClassLoader錛屼紶閫扴haredClassloader
鍙嶅皠call Catalina鏂規硶load 鍒╃敤server.xml涓殑閰嶇疆鍒濆鍖朣ervice,Server,Engine,Host
鍙嶅皠call Catalina鏂規硶start Start the new server  璇erver鏄氳繃  瑙f瀽xml鏂囦歡鐢熸垚鐨刼rg.apache.catalina.core.StandardServer綾?


銆恡omcat-xml瑙f瀽銆?
1.Tomcat鍙栦簡Digester涓殑interface鍜屽嚑涓猂ule,騫朵笖鑷繁瀹炵幇浜嗕竴浜?Rule 鏉ヨВ鏋恱ml.
2.tomcat瑙f瀽xml鍒涘緩浠ヤ笅鍑犱釜綾?
Server:
org.apache.catalina.core.StandardServer
Resources:
org.apache.catalina.deploy.NamingResources
Server's Listener:錛?鐩戝惉server浜嬩歡錛?
org.apache.catalina.core.AprLifecycleListener
org.apache.catalina.core.JasperListener
org.apache.catalina.mbeans.ServerLifecycleListener
org.apache.catalina.mbeans.GlobalResourcesLifecycleListener
Service:
org.apache.catalina.core.StandardService
Executor:
org.apache.catalina.core.StandardThreadExecutor
Engine:
org.apache.catalina.core.StandardEngine
Connector:
org.apache.catalina.connector.Connector

銆恡omcat-嫻佺▼銆?
3.StandardServer鍚姩StandardService錛孲tandardService鍚姩Connector錛?
Connector鍚姩Http11Protocol錛孒ttp11Protocol鍚姩JIoEndpoint錛?
JioEndpoint鍚姩server Socket錛宭istern 8080绔彛,澶勭悊http璇鋒眰

4.Http11Processor
Processes HTTP requests.
鐢県ttp11ConnectionHandler璋冪敤錛孒ttp11ConnectionHandler鐢盝ioEndpoint涓殑Work 璋冪敤

5.A connector passes the request and reponse objects to the Container by calling the Container interface's invoke method
public void invoke(Request request, Response response)
        throws IOException, ServletException;

inside the invoke method ,the container loads the servlet class,call its sevice method ,manage sessions,etc.

6.Connector 鏂規硶initialize涓?
// Initializa adapter
adapter = new CoyoteAdapter(this);
protocolHandler.setAdapter(adapter);
adapter閫氳繃protocolHandler(Http11Protocol)浼犵粰Http11Processor,
Http11Processor瑙f瀽錛宑reate request鍜宺esponse,閫氳繃adapter浼犻佺粰Container

7.Tomcat浣跨敤Pipeline妯″紡鍦ㄥ悇灞傚鍣ㄩ棿浼犻掕姹傦紝灝嗚姹傞氳繃綆¢亾渚濇閫氳繃Engine錛孒ost錛孋ontext鍜? Wrapper銆傚彟澶栵紝姣忎竴涓鍣?nbsp; 
閮藉彲浠ヨ緗竴緋誨垪鐨刅alve鍘誨璇鋒眰榪涜鎷?鎴紝灝卞儚綆¢亾涓殑闃涓鏍峰璇鋒眰鐨勮涓鴻繘琛屼竴浜涘共娑夈?


2010-3-31
銆恡omcat-嫻佺▼銆?
1.tomcat鐨刾ipeline/valve鏄爣鍑嗙殑璐d換閾炬ā寮?姣忎釜綰у埆鐨勫鍣ㄤ腑pipeline鎵鏈夌殑valve閮藉畬鎴愬姩浣滃悗浼氬皢 request/response浼犲埌涓嬩竴涓鍣ㄧ殑pipeline涓殑valve,
榪欐牱涓鐩翠紶閫掍笅鍘葷洿鍒癢rapper鐨凚aseValve.
Ps:姣忎釜瀹瑰櫒鐨凚aseValve浼氳皟鐢ㄤ笅涓鍣ㄧ殑璧峰valve

2.StandardEngine
灞炴ipeline  pipeline = new StandardPipeline(this);
鏋勯犲嚱鏁伴噷浼氳緗渶搴曞眰鐨勯榾闂?
pipeline.setBasic(new StandardEngineValve());
濡傛灉闇瑕佽緗柊闃闂ㄥ鐞嗛渶姹傦紝鍙渶瑕佽皟鐢?pipeline.addValve(Valve valve);

3.CoyoteAdapter涓細鎵ц
connector.getContainer().getPipeline().getFirst().invoke(request, response);
璇ヨ浠g爜浼氫竴灞備竴灞傝皟鐢ㄦ坊鍔犵殑闃闂?澶勭悊涓嬪幓.

2010-4-1
銆恡omcat-嫻佺▼銆?
1.jk鎻掍歡璐熻矗tomcat鍜屽叾瀹僪ttp瀹瑰櫒榪涜閫氫俊

2.榪炴帴鍣ㄥ崗璁瓵JP/1.3鏄痶omcat鐢ㄦ潵涓庡叾瀹僪ttp瀹瑰櫒榪涜榪炴帴鐨勫崗璁?

3.鎶婃寚瀹欳ontext鐨刢lassloader浠樼粰褰撳墠綰跨▼銆?
Thread.currentThread().setContextClassLoader(context.getLoader().getClassLoader()); 榪欐牱request灝卞彧鐪嬭鎸囧畾鐨刢ontext涓嬮潰鐨刢lasses鍜宩ar鍖?鑰岀湅涓嶈tomcat鏈韓鐨勭被銆?

2010-4-7
銆恡omcat-socke涓巜orker綰跨▼銆?
/**
* Process an incoming TCP/IP connection on the specified socket.  Any
* exception that occurs during processing must be logged and swallowed.
* <b>NOTE</b>:  This method is called from our Connector's thread.  We
* must assign it to our own thread so that multiple simultaneous
* requests can be handled.
* @param socket TCP socket to process
*/
synchronized void assign(Socket socket) {
// Wait for the Processor to get the previous Socket
while (available) {
try {
              wait();
       } catch (InterruptedException e) {
       }
    }
    // Store the newly available Socket and notify our thread
    this.socket = socket;
    available = true;
    notifyAll();
}

/**
* Await a newly assigned Socket from our Connector, or <code>null</code
* if we are supposed to shut down.
*/
private synchronized Socket await() {
// Wait for the Connector to provide a new Socket
while (!available) {
try {
wait();
} catch (InterruptedException e) {
}
}
    // Notify the Connector that we have received this Socket
    Socket socket = this.socket;
    available = false;
    notifyAll();
return (socket);
}
榪炴帴鍣ㄧ嚎紼嬭皟鐢╳orker綾葷殑assign綾伙紝worker綾葷殑鎵ц綰跨▼run鏂規硶浼氳皟鐢╝wait鏂規硶鑾峰彇socket錛岄氳繃 available鍙橀噺鐨勮緗拰wait/notify鏂規硶鏉ュ崗璋冨郊姝ょ殑鎿嶄綔銆傚綋榪炴帴鍣ㄧ嚎紼嬫湭浼犺緭socket錛寃orker綾葷嚎紼嬪氨鎵цwait絳夊緟錛?
褰搘orker綾繪墽琛岀嚎紼嬪湪澶勭悊蹇欑殑鏃跺欙紝榪炴帴鍣ㄧ嚎紼媤ait銆?


浣欏潥 2010-06-21 10:28 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 开化县| 神农架林区| 吐鲁番市| 巩留县| 香河县| 龙陵县| 泰宁县| 康马县| 胶州市| 汕尾市| 乌海市| 平阴县| 晴隆县| 江川县| 雅江县| 彭州市| 阳朔县| 许昌市| 平果县| 会泽县| 上蔡县| 尉氏县| 常州市| 界首市| 怀来县| 武山县| 若尔盖县| 长泰县| 赤峰市| 比如县| 四会市| 海伦市| 子洲县| 木兰县| 察隅县| 丰台区| 闸北区| 阳新县| 鹤山市| 和政县| 武安市|