¼ò½é
Tomcat ÖÐÔËÓõÄÐí¶à¾µäÉè¼ÆÄ£Ê½£¬ÈçÄ£°æÄ£Ê½¡¢¹¤³§Ä£Ê½ºÍµ¥ÀýģʽµÈ¡£Í¨¹ýѧϰËüÃǵÄʵ¼ùÔËÓÃÄܸøÎÒÃÇÒÔºóµÄ³ÌÐòÉè¼ÆÆðµ½Ò»¶¨µÄ½è¼ø×÷Óá£
Íâ¹Û
Íâ¹ÛÉè¼ÆÄ£Ê½ÔÚ Tomcat ÖÐÓжദʹÓã¬ÔÚ Request ºÍResponse¶ÔÏó·â×°ÖС¢StandardWrapperµ½
ServletConfig·â×°ÖС¢ApplicationContextµ½ ServletContext·â×°Öеȶ¼Óõ½ÁËÕâÖÖÉè¼ÆÄ£Ê½¡£
ÔÀí
Õâô¶à³¡ºÏ¶¼Óõ½ÁËÕâÖÖÉè¼ÆÄ£Ê½£¬ÄÇÕâÖÖÉè¼ÆÄ£Ê½¾¿¾¹ÄÜÓÐʲ ô×÷ÓÃÄØ£¿¹ËÃû˼Ò壬¾ÍÊǽ«Ò»¸ö¶«Î÷·â×°³ÉÒ»¸öÍâ¹ÛºÃÓëÈ˼ҸüÈÝÒ×½øÐн»Á÷£¬¾ÍÏñÒ»¸ö¹ú¼ÒµÄÍâ½»²¿Ò»Ñù¡£
ÕâÖÖÉè¼ÆÄ£Ê½Ö÷ÒªÓÃÔÚÒ»¸ö´óµÄϵͳÖÐÓжà¸ö×Óϵͳ×é³Éʱ£¬Õâ ¶à¸ö×Óϵͳ¿Ï¶¨ÒªÉæ¼°µ½Ï໥ͨÐÅ£¬µ«ÊÇÿ¸ö×ÓϵͳÓÖ²»Äܽ«×Ô¼ºµÄÄÚ²¿Êý¾Ý¹ý¶àµÄ±©Â¶¸øÆäËüϵͳ£¬²»È»¾ÍûÓбØÒª»®·Ö×ÓϵͳÁË¡£
ÿ¸ö×Óϵͳ¶¼»áÉè¼ÆÒ»¸öÍâ¹Û£¬°Ñ±ðµÄϵͳ¸ÐÐËȤµÄÊý¾Ý·â×°ÆðÀ´£¬ ͨ¹ýÕâ¸öÍâ¹ÛÀ´½øÐзÃÎÊ¡£Õâ¾ÍÊÇÍâ¹ÛÉè¼ÆÄ£Ê½´æÔÚµÄÒâÒå¡£
Íâ¹ÛÉè¼ÆÄ£Ê½Ê¾ÒâͼÈçÏ£º

ClientÖ»ÄÜ·ÃÎʵ½ Fa?adeÖÐÌṩµÄÊý¾ÝÊÇÍâ¹ÛÉè¼ÆÄ£Ê½µÄ¹Ø¼ü£¬ÖÁ ÓÚ ClientÈçºÎ·ÃÎÊ Fa?adeºÍ
SubsystemÈçºÎÌṩ Fa?ade Íâ¹ÛÉè ¼ÆÄ£Ê½²¢Ã»Óй涨ËÀ¡£
TomcatÖеÄdemo
Tomcat ÖÐÍâ¹ÛÉè¼ÆÄ£Ê½Ê¹Óõĺܶ࣬ÒòΪ Tomcat ÖÐÓкܶ಻ͬ×é¼þ£¬Ã¿¸ö×é¼þÒªÏ໥½»»¥Êý¾Ý£¬ÓÃÍâ¹Ûģʽ¸ôÀëÊý¾ÝÊǸöºÜºÃµÄ·½·¨¡£
ÏÂÃæÊÇ Request ÉÏʹÓõÄÍâ¹ÛÉè¼ÆÄ£Ê½£º

´ÓͼÖпÉÒÔ¿´³ö HttpRequestFacadeÀà·â×°ÁË HttpRequest ½Ó¿ÚÄÜ ¹»ÌṩÊý¾Ý£¬Í¨¹ý
HttpRequestFacade·ÃÎʵ½µÄÊý¾Ý¶¼±»´úÀíµ½ HttpRequest ÖУ¬Í¨³£±»·â×°µÄ¶ÔÏó¶¼±»ÉèΪ
Private»òÕß Protected ·ÃÎÊÐÞÊΣ¬ÒÔ·ÀÖ¹ÔÚ Fa?ade Öб»Ö±½Ó·ÃÎÊ¡£
¹Û²ìÕß
ÕâÖÖÉè¼ÆÄ£Ê½Ò²Êdz£ÓõÄÉè¼Æ·½·¨Í¨³£Ò²½Ð·¢²¼ -¶©ÔÄģʽ£¬Ò² ¾ÍÊÇʼþ¼àÌý»úÖÆ£¬Í¨³£ÔÚij¸öʼþ·¢ÉúµÄǰºó»á´¥·¢Ò»Ð©²Ù×÷¡£
ÔÀí
¹Û²ìÕßģʽÔÀíÒ²ºÜ¼òµ¥£¬¾ÍÊÇÄãÔÚ×öʵÄʱºòÅÔ±ß×ÜÓÐÒ»¸öÈËÔÚ¶¢×ÅÄ㣬µ±Äã×öµÄÊÂÇéÊÇËü¸ÐÐËȤµÄʱºò£¬Ëü¾Í»á¸ú×Å×öÁíÍâÒ»
ЩÊÂÇé¡£µ«ÊǶ¢×ÅÄãµÄÈ˱ØÐëÒªµ½ÄãÄÇÈ¥µÇ¼Ç£¬²»È»ÄãÎÞ·¨Í¨ÖªËü¡£ ¹Û²ìÕßģʽͨ³£°üº¬ÏÂÃæÕ⼸¸ö½ÇÉ«£º
Subject ¾ÍÊdzéÏóÖ÷Ì⣺Ëü¸ºÔð¹ÜÀíËùÓй۲ìÕßµÄÒýÓã¬Í¬Ê±¶¨ÒåÖ÷ÒªµÄʼþ²Ù×÷¡£
ConcreteSubject ¾ßÌåÖ÷Ì⣺ËüʵÏÖÁ˳éÏóÖ÷ÌâµÄËùÓж¨ÒåµÄ½Ó¿Ú£¬µ±×Ô¼º·¢Éú±ä »¯Ê±£¬»á֪ͨËùÓй۲ìÕß¡£
Observer ¹Û²ìÕߣº¼àÌýÖ÷Ìâ·¢Éú±ä»¯ÏàÓ¦µÄ²Ù×÷½Ó¿Ú¡£
TomcatÖеÄdemo
Tomcat Öй۲ìÕßģʽҲÓжദʹÓã¬Ç°Ãæ½²µÄ¿ØÖÆ×é¼þÉúÃüÖÜÆÚµÄ Lifecycle¾ÍÊÇÕâÖÖģʽµÄÌåÏÖ£¬»¹ÓжÔ
ServletʵÀýµÄ´´½¨¡¢ SessionµÄ¹ÜÀí¡¢ContainerµÈ¶¼ÊÇͬÑùµÄÔÀí¡£ÏÂÃæÖ÷Òª¿´Ò»Ï Lifecycle
µÄ¾ßÌåʵÏÖ¡£
Lifecycle µÄ¹Û²ìÕßģʽ½á¹¹Í¼£º

ÉÏÃæµÄ½á¹¹Í¼ÖУ¬LifecycleListener´ú±íµÄÊdzéÏó¹Û²ìÕߣ¬Ëü¶¨ ÒåÒ»¸ö lifecycleEvent·½·¨£¬Õâ¸ö·½·¨¾ÍÊǵ±Ö÷Ìâ±ä»¯Ê±ÒªÖ´Ðеķ½
·¨¡£ ServerLifecycleListener´ú±íµÄÊǾßÌåµÄ¹Û²ìÕߣ¬ËüʵÏÖÁË LifecycleListener½Ó¿ÚµÄ·½·¨£¬¾ÍÊÇÕâ¸ö¾ßÌåµÄ¹Û²ìÕß¾ßÌåµÄʵÏÖ·½Ê½¡£Lifecycle½Ó¿Ú´ú±íµÄÊdzéÏóÖ÷Ì⣬Ëü¶¨ÒåÁ˹ÜÀí¹Û²ìÕߵķ½·¨
ºÍËüÒªËù×öµÄÆäËü·½·¨¡£¶ø StandardServer´ú±íµÄÊǾßÌåÖ÷Ì⣬Ëü ʵÏÖÁ˳éÏóÖ÷ÌâµÄËùÓз½·¨¡£ÕâÀï
Tomcat ¶Ô¹Û²ìÕß×öÁËÀ©Õ¹£¬Ôö¼ÓÁËÁíÍâÁ½¸öÀࣺLifecycleSupport¡¢LifecycleEvent£¬ËüÃÇ×÷Ϊ¸¨ÖúÀàÀ©Õ¹Á˹۲ìÕߵŦÄÜ¡£LifecycleEventʹµÃ¿ÉÒÔ¶¨ÒåʼþÀà±ð£¬²»
ͬµÄʼþ¿ÉÇø±ð´¦Àí£¬¸ü¼ÓÁé»î¡£LifecycleSupportÀà´úÀíÁËÖ÷Ìâ¶Ô ¶à¹Û²ìÕߵĹÜÀí£¬½«Õâ¸ö¹ÜÀí³é³öÀ´Í³Ò»ÊµÏÖ£¬ÒÔºóÈç¹ûÐÞ¸ÄÖ»Òª
ÐÞ¸Ä LifecycleSupportÀà¾Í¿ÉÒÔÁË£¬²»ÐèҪȥÐÞ¸ÄËùÓоßÌåÖ÷Ì⣬ ÒòΪËùÓоßÌåÖ÷ÌâµÄ¶Ô¹Û²ìÕߵIJÙ×÷¶¼±»´úÀí¸ø
LifecycleSupportÀàÁË¡£Õâ¿ÉÒÔÈÏΪÊǹ۲ìÕßģʽµÄ¸Ä½ø°æ¡£
LifecycleSupport µ÷Óù۲ìÕߵķ½·¨´úÂëÈçÏ£º
1. LifecycleSupport ÖÐµÄ fireLifecycleEvent ·½·¨
<span style="font-size:18px;">public void fireLifecycleEvent(String type, Object data) { LifecycleEvent event = new LifecycleEvent(lifecycle, type, data); LifecycleListener interested[] = null; synchronized (listeners) { interested = (LifecycleListener[]) listeners.clone(); } for (int i = 0; i < interested.length; i++) interested[i].lifecycleEvent(event); }</span> |
Ö÷ÌâÊÇÔõô֪ͨ¹Û²ìÕßÄØ£¿¿´ÏÂÃæ´úÂ룺
2. ÈÝÆ÷ÖÐµÄ start ·½·¨
<span style="font-size:18px;">public void start() throws LifecycleException { lifecycle.fireLifecycleEvent(BEFORE_START_EVENT, null); lifecycle.fireLifecycleEvent(START_EVENT, null); started = true; synchronized (services) { for (int i = 0; i < services.length; i++) { if (services[i] instanceof Lifecycle) ((Lifecycle) services[i]).start(); } } lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null); }</span> |
ÃüÁî
Ç°Ãæ°Ñ TomcatÖÐÁ½¸öºËÐÄ×é¼þ ConnectorºÍ Container£¬±È×÷Ò»¶Ô·òÆÞ¡£ÄеĽ«½ÓÊܹýÀ´µÄÇëÇóÒÔÃüÁîµÄ·½Ê½½»¸øÅ®Ö÷ÈË¡£¶ÔÓ¦
µ½ ConnectorºÍ Container£¬ConnectorÒ²ÊÇͨ¹ýÃüÁîģʽµ÷Óà ContainerµÄ¡£
ÔÀí
ÃüÁîģʽÖ÷Òª×÷ÓþÍÊÇ·â×°ÃüÁ°Ñ·¢³öÃüÁîµÄÔðÈκÍÖ´ÐÐÃüÁî µÄÔðÈηֿª¡£Ò²ÊÇÒ»ÖÖ¹¦Äܵķֹ¤¡£²»Í¬µÄÄ£¿é¿ÉÒÔ¶Ôͬһ¸öÃüÁî×ö³ö²»Í¬½âÊÍ¡£
ÏÂÃæÊÇÃüÁîģʽͨ³£°üº¬ÏÂÃæ¼¸¸ö½ÇÉ«£º
Client£º´´½¨Ò»¸öÃüÁ²¢¾ö¶¨½ÓÊÜÕß
Command ÃüÁÃüÁî½Ó¿Ú¶¨ÒåÒ»¸ö³éÏó·½·¨
ConcreteCommand£º¾ßÌåÃüÁ¸ºÔðµ÷ÓýÓÊÜÕßµÄÏàÓ¦²Ù×÷
Invoker ÇëÇóÕߣº¸ºÔðµ÷ÓÃÃüÁî¶ÔÏóÖ´ÐÐÇëÇó
Receiver ½ÓÊÜÕߣº¸ºÔð¾ßÌåʵʩºÍÖ´ÐÐÒ»´ÎÇëÇó
Tomcat ÖеÄdemo
TomcatÖÐÃüÁîģʽÔÚ ConnectorºÍ Container×é¼þÖ®¼äÓÐÌåÏÖ£¬ Tomcat ×÷Ϊһ¸öÓ¦Ó÷þÎñÆ÷£¬ÎÞÒÉ»á½ÓÊܵ½ºÜ¶àÇëÇó£¬ÈçºÎ·ÖÅäºÍÖ´ÐÐÕâЩÇëÇóÊDZØÐëµÄ¹¦ÄÜ¡£
ÏÂÃæ¿´Ò»Ï Tomcat ÊÇÈçºÎʵÏÖÃüÁîģʽµÄ£¬ÏÂÃæÊÇ Tomcat ÃüÁî ģʽµÄ½á¹¹Í¼£º

Connector ×÷Ϊ³éÏóÇëÇóÕߣ¬HttpConnector×÷Ϊ¾ßÌåÇëÇóÕß¡£ HttpProcessor×÷ΪÃüÁî¡£Container×÷ΪÃüÁîµÄ³éÏó½ÓÊÜÕߣ¬
ContainerBase ×÷Ϊ¾ßÌåµÄ½ÓÊÜÕß¡£¿Í»§¶Ë¾ÍÊÇÓ¦Ó÷þÎñÆ÷ Server×é¼þÁË¡£Server Ê×ÏÈ´´½¨ÃüÁîÇëÇóÕßHttpConnector¶ÔÏó£¬È»ºó´´½¨ÃüÁî
HttpProcessorÃüÁî¶ÔÏó¡£ÔÙ°ÑÃüÁî¶ÔÏ󽻸øÃüÁî½ÓÊÜÕß ContainerBase ÈÝÆ÷À´´¦ÀíÃüÁî¡£ÃüÁîµÄ×îÖÕÊDZ»
Tomcat µÄ ContainerÖ´Ðеġ£ÃüÁî¿ÉÒÔÒÔ¶ÓÁеķ½Ê½½øÀ´£¬ContainerÒ²¿ÉÒÔ ÒÔ²»Í¬µÄ·½Ê½À´´¦ÀíÇëÇó£¬Èç
HTTP1.0ÐÒéºÍ HTTP1.1µÄ´¦Àí·½ ʽ¾Í»á²»Í¬¡£
Ö°ÔðÁ´
Tomcat ÖÐÒ»¸ö×îÈÝÒ×·¢ÏÖµÄÉè¼ÆÄ£Ê½¾ÍÊÇÖ°ÔðÁ´Ä£Ê½£¬Õâ¸öÉè ¼ÆÄ£Ê½Ò²ÊÇTomcatÖÐ ContainerÉè¼ÆµÄ»ù´¡£¬Õû¸öÈÝÆ÷µÄ¾ÍÊÇͨ
¹ýÒ»¸öÁ´Á¬½ÓÔÚÒ»Æð£¬Õâ¸öÁ´Ò»Ö±½«ÇëÇóÕýÈ·µÄ´«µÝ¸ø×îÖÕ´¦ÀíÇë ÇóµÄÄǸö Servlet¡£
ÔÀí
Ö°ÔðÁ´Ä£Ê½£¬¾ÍÊǺܶà¶ÔÏóÓÐÿ¸ö¶ÔÏó¶ÔÆäϼҵÄÒýÓöøÁ¬½ÓÆð À´ÐγÉÒ»ÌõÁ´£¬ÇëÇóÔÚÕâÌõÁ´ÉÏ´«µÝ£¬Ö±µ½Á´ÉϵÄij¸ö¶ÔÏó´¦Àí´ËÇëÇ󣬻òÕßÿ¸ö¶ÔÏ󶼿ÉÒÔ´¦ÀíÇëÇ󣬲¢´«¸øÏÂÒ»¼Ò£¬Ö±µ½×îÖÕÁ´
ÉÏÿ¸ö¶ÔÏó¶¼´¦ÀíÍê¡£ÕâÑù¿ÉÒÔ²»Ó°Ïì¿Í»§¶Ë¶øÄܹ»ÔÚÁ´ÉÏÔö¼ÓÈÎ ÒâµÄ´¦Àí½Úµã¡£
ͨ³£Ö°ÔðÁ´Ä£Ê½°üº¬ÏÂÃæ¼¸¸ö½ÇÉ«£º
Handler£¨³éÏó´¦ÀíÕߣ©£º¶¨ÒåÒ»¸ö´¦ÀíÇëÇóµÄ½Ó¿Ú
ConcreteHandler£¨¾ßÌå´¦ÀíÕߣ©£º´¦ÀíÇëÇóµÄ¾ßÌåÀ࣬»òÕß´«¸øÏ¼Ò
Tomcat ÖеÄdemo
ÔÚtomcatÖÐÕâÖÖÉè¼ÆÄ£Ê½¼¸ºõ±»ÍêÕûµÄʹÓã¬tomcatµÄÈÝÆ÷ÉèÖþÍÊÇÖ°ÔðÁ´Ä£Ê½£¬´Ó Engine
µ½ HostÔÙµ½ ContextÒ»Ö±µ½ Wrapper ¶¼ÊÇͨ¹ýÒ»¸öÁ´´«µÝÇëÇó¡£
Tomcat ÖÐÖ°ÔðÁ´Ä£Ê½µÄÀà½á¹¹Í¼ÈçÏ£º


ÉÏͼ»ù±¾ÃèÊöÁËËĸö×ÓÈÝÆ÷ʹÓÃÖ°ÔðÁ´Ä£Ê½µÄÀà½á¹¹Í¼£¬¶ÔÓ¦µÄ Ö°ÔðÁ´Ä£Ê½µÄ½ÇÉ«£¬Container°çÑݳéÏó´¦ÀíÕß½ÇÉ«£¬¾ßÌå´¦ÀíÕßÓÉ
StandardEngineµÈ×ÓÈÝÆ÷°çÑÝ¡£Óë±ê×¼µÄÖ°ÔðÁ´²»Í¬µÄÊÇ£¬ÕâÀïÒý ÈëÁË PipelineºÍ Valve½Ó¿Ú¡£ËûÃÇÓÐʲô×÷ÓÃÄØ£¿
ʵ¼ÊÉÏ PipelineºÍ ValveÊÇÀ©Õ¹ÁËÕâ¸öÁ´µÄ¹¦ÄÜ£¬Ê¹µÃÔÚÁ´ÍùÏ ´«µÝ¹ý³ÌÖУ¬Äܹ»½ÓÊÜÍâ½çµÄ¸ÉÔ¤¡£Pipeline¾ÍÊÇÁ¬½Óÿ¸ö×ÓÈÝÆ÷
µÄ¹Ü×Ó£¬ÀïÃæ´«µÝµÄ RequestºÍ Response¶ÔÏóºÃ±È¹Ü×ÓÀïÁ÷µÄË®£¬ ¶ø Valve¾ÍÊÇÕâ¸ö¹Ü×ÓÉÏ¿ªµÄÒ»¸ö¸öС¿Ú×Ó£¬ÈÃÄãÓлú»áÄܹ»½Ó´¥
µ½ÀïÃæµÄË®£¬×öһЩ¶îÍâµÄÊÂÇé¡£
ΪÁË·Àֹˮ±»Òý³öÀ´¶ø²»ÄÜÁ÷µ½ÏÂÒ»¸öÈÝÆ÷ÖУ¬Ã¿Ò»¶Î¹Ü×Ó×îºó ×ÜÓÐÒ»¸ö½Úµã±£Ö¤ËüÒ»¶¨ÄÜÁ÷µ½ÏÂÒ»¸ö×ÓÈÝÆ÷£¬ËùÒÔÿ¸öÈÝÆ÷¶¼ÓÐÒ»¸öStandardXXXValve¡£Ö»ÒªÉæ¼°µ½ÕâÖÖÓÐÁ´Ê½ÊÇ´¦ÀíÁ÷³ÌÕâÊÇÒ»¸ö·Ç³£ÖµµÃ½è¼øµÄģʽ¡£
ÒµÎñ˼Ïë
TomcatÖеÄÉè¼ÆÄ£Ê½ºÜÖµµÃÑо¿Ñ§Ï°£¬ÃâµÃÈÆÂ·È¥ÉÏѧ£¬¸ã²»ºÃ³É¼¨»¹µÍÄØ¡£
²»ÖªµÀÓÐÅóÓÑ¿´¹ý¡¶ÉäµñÓ¢ÐÛ´«¡·Ä¾£¿ÆäÖÐÒ»¶ÎÊǽ²»ÆÈØÊÜÉËÈ¥°Ý¼ûÄϵ۶λÊÒ¯ÖÎÁÆ£¬Í¾ÓöÀÏÍçͯµÄÀÏÆÅçø¹Ã£¬¶þÈËÔÚéÎÝÄÚ×öËãÊõÌâ£¬çø¹ÃÊDZÕÃÅÔì³µ£¬¶ø»ÆÈØÊÇ¿´»ÆÀÏа£¨Ò²¾ÍÊÇËûÀϰÖÊÕ¼¯µÄÊé±¾£©£¬×îºó½á¹ûÏàÐÅ´ó¼Ò¶¼ÖªµÀ£ºçø¹Ãpkʧ°Ü¡£ÔÒòÖµµÃ̽¾¿£ºÊ±¿ÌÒªÕ¾ÔÚ¾ÞÈ˵ļç°òÉÏÀ´Ñ§Ï°¡£ |