±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜTomcatÊÇʲô£¬Ö÷ÒªÓÐ
Container ºÍ Connector ÒÔ¼°Ïà¹Ø×é¼þ¹¹³É,Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ¾ò½ð£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
Tomcat×é³ÉÓ빤×÷ÔÀí
TomcatÊÇʲô
¿ªÔ´µÄ Java Web Ó¦Ó÷þÎñÆ÷£¬ÊµÏÖÁË Java EE(Java Platform Enterprise
Edition)µÄ²¿ ·Ö¼¼Êõ¹æ·¶£¬±ÈÈç Java Servlet¡¢Java Server Page¡¢JSTL¡¢Java
WebSocket¡£Java EE ÊÇ Sun ¹« ˾ΪÆóÒµ¼¶Ó¦ÓÃÍÆ³öµÄ±ê׼ƽ̨£¬¶¨ÒåÁËһϵÁÐÓÃÓÚÆóÒµ¼¶¿ª·¢µÄ¼¼Êõ¹æ·¶£¬³ýÁËÉÏÊöµÄÖ®Í⣬»¹ÓÐ
EJB¡¢Java Mail¡¢JPA¡¢JTA¡¢JMS µÈ£¬¶øÕâЩ¶¼ÒÀÀµ¾ßÌåÈÝÆ÷µÄʵÏÖ¡£

ÉÏͼ¶Ô±ÈÁË Java EE ÈÝÆ÷µÄʵÏÖÇé¿ö£¬Tomcat ºÍ Jetty ¶¼Ö»ÌṩÁË Java Web
ÈÝÆ÷±ØÐèµÄ Servlet ºÍ JSP ¹æ·¶£¬¿ª·¢ÕßÒªÏëʵÏÖÆäËûµÄ¹¦ÄÜ£¬ÐèÒª×Ô¼ºÒÀÀµÆäËû¿ªÔ´ÊµÏÖ¡£
Glassfish ÊÇÓÉ sun ¹«Ë¾ÍƳö£¬Java EE ×îй淶³öÀ´Ö®ºó£¬Ê×ÏÈ»áÔÚ Glassfish
ÉϽøÐÐʵ ÏÖ£¬ËùÒÔÊÇÑо¿ Java EE ×îм¼ÊõµÄÊ×Ñ¡¡£
×î³£¼ûµÄÇé¿öÊÇʹÓà Tomcat ×÷Ϊ Java Web ·þÎñÆ÷£¬Ê¹Óà Spring ÌṩµÄ¿ªÏä¼´ÓõÄÇ¿´ó
µÄ¹¦ÄÜ£¬²¢ÒÀÀµÆäËû¿ªÔ´¿âÀ´Íê³É¸ºÔðµÄÒµÎñ¹¦ÄÜʵÏÖ¡£
ServletÈÝÆ÷
Tomcat ×é³ÉÈçÏÂͼ£º Ö÷ÒªÓÐ Container ºÍ Connector ÒÔ¼°Ïà¹Ø×é¼þ¹¹³É¡£

Server£ºÖ¸µÄ¾ÍÊÇÕû¸ö Tomcat ·þ ÎñÆ÷£¬°üº¬¶à×é·þÎñ£¬¸ºÔð¹ÜÀíºÍ Æô¶¯¸÷¸ö Service£¬Í¬Ê±¼àÌý
8005 ¶Ë¿Ú·¢¹ýÀ´µÄ shutdown ÃüÁÓà ÓڹرÕÕû¸öÈÝÆ÷ £»
Service£ºTomcat ·â×°µÄ¡¢¶ÔÍâÌá ¹©ÍêÕûµÄ¡¢»ùÓÚ×é¼þµÄ web ·þÎñ£¬ °üº¬ Connectors¡¢Container
Á½¸ö ºËÐÄ×é¼þ£¬ÒÔ¼°¶à¸ö¹¦ÄÜ×é¼þ£¬¸÷ ¸ö Service Ö®¼äÊǶÀÁ¢µÄ£¬µ«Êǹ²Ïí ͬһ JVM µÄ×ÊÔ´
£»
Connector£ºTomcat ÓëÍⲿÊÀ½çµÄÁ¬½ÓÆ÷£¬¼àÌý¹Ì¶¨¶Ë¿Ú½ÓÊÕÍⲿÇëÇ󣬴«µÝ¸ø Container£¬²¢
½« Container ´¦ÀíµÄ½á¹û·µ»Ø¸øÍⲿ£»
Container£ºCatalina£¬Servlet ÈÝÆ÷£¬ÄÚ²¿Óжà²ãÈÝÆ÷×é³É£¬ÓÃÓÚ¹ÜÀí Servlet
ÉúÃüÖÜÆÚ£¬µ÷Óà servlet Ïà¹Ø·½·¨¡£
Loader£º·â×°ÁË Java ClassLoader£¬ÓÃÓÚ Container ¼ÓÔØÀàÎļþ£» Realm£ºTomcat
ÖÐΪ web Ó¦ÓóÌÐòÌṩ·ÃÎÊÈÏÖ¤ºÍ½ÇÉ«¹ÜÀíµÄ»úÖÆ£»
JMX£ºJava SE Öж¨Òå¼¼Êõ¹æ·¶£¬ÊÇÒ»¸öΪӦÓóÌÐò¡¢É豸¡¢ÏµÍ³µÈÖ²Èë¹ÜÀí¹¦ÄܵĿò¼Ü£¬Í¨¹ý JMX
¿ÉÒÔÔ¶³Ì¼à¿Ø Tomcat µÄÔËÐÐ״̬£»
Jasper£ºTomcat µÄ Jsp ½âÎöÒýÇæ£¬ÓÃÓÚ½« Jsp ת»»³É Java Îļþ£¬²¢±àÒë³É
class Îļþ¡£ Session£º¸ºÔð¹ÜÀíºÍ´´½¨ session£¬ÒÔ¼° Session µÄ³Ö¾Ã»¯(¿É×Ô¶¨Òå)£¬Ö§³Ö
session µÄ¼¯ Ⱥ¡£
Pipeline£ºÔÚÈÝÆ÷Öг䵱¹ÜµÀµÄ×÷Ó㬹ܵÀÖпÉÒÔÉèÖø÷ÖÖ valve(·§ÃÅ)£¬ÇëÇóºÍÏìÓ¦ÔÚ¾ÓɹÜ
µÀÖи÷¸ö·§ÃÅ´¦Àí£¬ÌṩÁËÒ»ÖÖÁé»î¿ÉÅäÖõĴ¦ÀíÇëÇóºÍÏìÓ¦µÄ»úÖÆ¡£
Naming£ºÃüÃû·þÎñ£¬JNDI£¬ Java ÃüÃûºÍĿ¼½Ó¿Ú£¬ÊÇÒ»×éÔÚ Java Ó¦ÓÃÖзÃÎÊÃüÃûºÍĿ¼·þÎñµÄ
API¡£ÃüÃû·þÎñ½«Ãû³ÆºÍ¶ÔÏóÁªÏµÆðÀ´£¬Ê¹µÃÎÒÃÇ¿ÉÒÔÓÃÃû³Æ·ÃÎʶÔÏó£¬Ä¿Â¼·þÎñÒ²ÊÇÒ»ÖÖÃüÃû ·þÎñ£¬¶ÔÏó²»µ«ÓÐÃû³Æ£¬»¹ÓÐÊôÐÔ¡£Tomcat
ÖпÉÒÔʹÓà JNDI ¶¨ÒåÊý¾ÝÔ´¡¢ÅäÖÃÐÅÏ¢£¬ÓÃÓÚ¿ª·¢ Ó벿ÊðµÄ·ÖÀë¡£
Container×é³É

Engine£ºServlet µÄ¶¥²ãÈÝÆ÷£¬°üº¬Ò» ¸ö»ò¶à¸ö Host ×ÓÈÝÆ÷£» Host£ºÐéÄâÖ÷»ú£¬¸ºÔð
web Ó¦ÓõIJ¿ ÊðºÍ Context µÄ´´½¨£» Context£ºWeb Ó¦ÓÃÉÏÏÂÎÄ£¬°üº¬¶à¸ö Wrapper£¬¸ºÔð
web ÅäÖõĽâÎö¡¢¹Ü ÀíËùÓÐµÄ Web ×ÊÔ´£» Wrapper£º×îµ×²ãµÄÈÝÆ÷£¬ÊÇ¶Ô Servlet
µÄ·â×°£¬¸ºÔð Servlet ʵÀýµÄ´´ ½¨¡¢Ö´ÐкÍÏú»Ù¡£
ÉúÃüÖÜÆÚ¹ÜÀí Tomcat ΪÁË·½±ã¹ÜÀí×é¼þºÍÈÝÆ÷µÄÉúÃüÖÜÆÚ£¬¶¨ÒåÁË´Ó´´½¨¡¢Æô¶¯¡¢µ½Í£Ö¹¡¢Ïú»Ù¹²
12 ÖÐ״̬£¬tomcat ÉúÃüÖÜÆÚ¹ÜÀíÁËÄÚ²¿×´Ì¬±ä»¯µÄ¹æÔò¿ØÖÆ£¬×é¼þºÍÈÝÆ÷Ö»ÐèʵÏÖÏàÓ¦µÄÉúÃüÖÜÆÚ
·½·¨¼´¿ÉÍê³É¸÷ÉúÃüÖÜÆÚÄڵIJÙ×÷(initInternal¡¢startInternal¡¢stopInternal¡¢
destroyInternal)£»
±ÈÈçÖ´Ðгõʼ»¯²Ù×÷ʱ£¬»áÅжϵ±Ç°×´Ì¬ÊÇ·ñ New£¬Èç¹û²»ÊÇÔòÅ׳öÉúÃüÖÜÆÚÒì³££»ÊÇµÄ »°ÔòÉèÖõ±Ç°×´Ì¬Îª
Initializing£¬²¢Ö´ÐÐ initInternal ·½·¨£¬ÓÉ×ÓÀàʵÏÖ£¬·½·¨Ö´Ðгɹ¦ÔòÉèÖõ±
ǰ״̬Ϊ Initialized£¬Ö´ÐÐʧ°ÜÔòÉèÖÃΪ Failed ״̬£»

Tomcat µÄÉúÃüÖÜÆÚ¹ÜÀíÒýÈëÁËʼþ»úÖÆ£¬ÔÚ×é¼þ»òÈÝÆ÷µÄÉúÃüÖÜÆÚ״̬·¢Éú±ä»¯Ê±»áͨ ֪ʼþ¼àÌýÆ÷£¬¼àÌýÆ÷ͨ¹ýÅжÏʼþµÄÀàÐÍÀ´½øÐÐÏàÓ¦µÄ²Ù×÷¡£
ʼþ¼àÌýÆ÷µÄÌí¼Ó¿ÉÒÔÔÚ server.xml ÎļþÖнøÐÐÅäÖÃ;
Tomcat ¸÷ÀàÈÝÆ÷µÄÅäÖùý³Ì¾ÍÊÇͨ¹ýÌí¼Ó listener µÄ·½Ê½À´½øÐе쬴Ӷø´ïµ½ÅäÖÃÂß¼Óë
ÈÝÆ÷µÄ½âñî¡£Èç EngineConfig¡¢HostConfig¡¢ContextConfig¡£ EngineConfig£ºÖ÷Òª´òÓ¡Æô¶¯ºÍÍ£Ö¹ÈÕÖ¾
HostConfig£ºÖ÷Òª´¦Àí²¿ÊðÓ¦Ó㬽âÎöÓ¦Óà META-INF/context.xml ²¢´´½¨Ó¦ÓõÄ
Context ContextConfig£ºÖ÷Òª½âÎö²¢ºÏ²¢ web.xml£¬É¨ÃèÓ¦Óõĸ÷Àà web
×ÊÔ´ (filter¡¢servlet¡¢listener)

Tomcat µÄÆô¶¯¹ý³Ì

Æô¶¯´Ó Tomcat ÌṩµÄ start.sh ½Å±¾¿ªÊ¼£¬shell ½Å±¾»áµ÷Óà Bootstrap
µÄ main ·½·¨£¬Êµ¼Ê µ÷ÓÃÁË Catalina ÏàÓ¦µÄ load¡¢start ·½·¨¡£
load ·½·¨»áͨ¹ý Digester ½øÐÐ config/server.xml µÄ½âÎö£¬ÔÚ½âÎöµÄ¹ý³ÌÖлá¸ù¾Ý
xml ÖеĹØÏµ ºÍÅäÖÃÐÅÏ¢À´´´½¨ÈÝÆ÷£¬²¢ÉèÖÃÏà¹ØµÄÊôÐÔ¡£½Ó×Å Catalina »áµ÷Óà StandardServer
µÄ init ºÍ start ·½·¨½øÐÐÈÝÆ÷µÄ³õʼ»¯ºÍÆô¶¯¡£
°´ÕÕ xml µÄÅäÖùØÏµ£¬server µÄ×ÓÔªËØÊÇ service£¬service µÄ×ÓÔªËØÊǶ¥²ãÈÝÆ÷
Engine£¬Ã¿²ãÈÝÆ÷ÓгÖÓÐ×Ô¼ºµÄ×ÓÈÝÆ÷£¬¶øÕâÐ©ÔªËØ¶¼ÊµÏÖÁËÉúÃüÖÜÆÚ¹ÜÀí µÄ¸÷¸ö·½·¨£¬Òò´Ë¾ÍºÜÈÝÒ×µÄÍê³ÉÕû¸öÈÝÆ÷µÄÆô¶¯¡¢¹Ø±ÕµÈÉúÃüÖÜÆÚµÄ¹ÜÀí¡£
StandardServer Íê³É init ºÍ start ·½·¨µ÷Óú󣬻áÒ»Ö±¼àÌýÀ´×Ô 8005
¶Ë¿Ú(¿ÉÅäÖÃ)£¬Èç¹û½ÓÊÕ µ½ shutdown ÃüÁÔò»áÍ˳öÑ»·¼àÌý£¬Ö´ÐкóÐøµÄ stop ºÍ destroy
·½·¨£¬Íê³É Tomcat ÈÝÆ÷µÄ ¹Ø±Õ¡£Í¬Ê±Ò²»áµ÷Óà JVM µÄ Runtime.getRuntime()?.addShutdownHook
·½·¨£¬ÔÚÐéÄâ»úÒâÍâÍË ³öµÄʱºòÀ´¹Ø±ÕÈÝÆ÷¡£
ËùÓÐÈÝÆ÷¶¼ÊǼ̳Ð×Ô ContainerBase£¬»ùÀàÖзâ×°ÁËÈÝÆ÷ÖеÄÖØ¸´¹¤×÷£¬¸ºÔðÆô¶¯ÈÝÆ÷Ïà¹ØµÄ×é
¼þ Loader¡¢Logger¡¢Manager¡¢Cluster¡¢Pipeline£¬Æô¶¯×ÓÈÝÆ÷(Ï̳߳ز¢·¢Æô¶¯×ÓÈÝÆ÷£¬Í¨¹ý
Ïß³Ì³Ø submit ¶à¸öỊ̈߳¬µ÷ÓÃºó·µ»Ø Future ¶ÔÏó£¬Ïß³ÌÄÚ²¿Æô¶¯×ÓÈÝÆ÷£¬½Ó×ŵ÷Óà Future
¶ÔÏó µÄ get ·½·¨À´µÈ´ýÖ´Ðнá¹û)¡£
Web Ó¦ÓõIJ¿Êð·½Ê½ ×¢£ºcatalina.home£º°²×°Ä¿Â¼;catalina.base£º¹¤×÷Ŀ¼;ĬÈÏÖµ
user.dir
Server.xml ÅäÖà Host ÔªËØ£¬Ö¸¶¨ appBase ÊôÐÔ£¬Ä¬ÈÏ$catalina.base/webapps/
Server.xml ÅäÖà Context ÔªËØ£¬Ö¸¶¨ docBase£¬ÔªËØ£¬Ö¸¶¨ web Ó¦ÓõÄ·¾¶
×Ô¶¨ÒåÅäÖãºÔÚ$catalina.base/EngineName/HostName/XXX.xml
ÅäÖà Context ÔªËØ
HostConfig ¼àÌýÁË StandardHost ÈÝÆ÷µÄʼþ£¬ÔÚ start ·½·¨ÖнâÎöÉÏÊöÅäÖÃÎļþ£º
ɨÃè appbase ·¾¶ÏµÄËùÓÐÎļþ¼ÐºÍ war °ü£¬½âÎö¸÷¸öÓ¦ÓÃµÄ META-INF/context.xml£¬²¢
´´½¨ StandardContext£¬²¢½« Context ¼ÓÈëµ½ Host µÄ×ÓÈÝÆ÷ÖС£
½âÎö$catalina.base/EngineName/HostName/ϵÄËùÓÐ Context
ÅäÖã¬ÕÒµ½ÏàÓ¦ web Ó¦ ÓõÄλÖ㬽âÎö¸÷¸öÓ¦ÓÃµÄ META-INF/context.xml£¬²¢´´½¨
StandardContext£¬²¢½« Context ¼ÓÈëµ½ Host µÄ×ÓÈÝÆ÷ÖС£
×¢£º
HostConfig ²¢Ã»ÓÐʵ¼Ê½âÎö Context.xml£¬¶øÊÇÔÚ ContextConfig
ÖнøÐеġ£
HostConfig ÖлᶨÆÚ¼ì²é watched ×ÊÔ´Îļþ(context.xml ÅäÖÃÎļþ)
ContextConfig ½âÎö context.xml ˳Ðò£º
ÏȽâÎöÈ«¾ÖµÄÅäÖà config/context.xml
È»ºó½âÎö Host µÄĬÈÏÅäÖà EngineName/HostName/context.xml.default
×îºó½âÎöÓ¦ÓÃµÄ META-INF/context.xml
ContextConfig ½âÎö web.xml ˳Ðò£º
ÏȽâÎöÈ«¾ÖµÄÅäÖà config/web.xml
È»ºó½âÎö Host µÄĬÈÏÅäÖà EngineName/HostName/web.xml.default
½Ó׎âÎöÓ¦ÓÃµÄ MEB-INF/web.xml
ɨÃèÓ¦Óà WEB-INF/lib/Ï嵀 jar Îļþ£¬½âÎöÆäÖÐµÄ META-INF/web-fragment.xml
×îºóºÏ²¢ xml ·â×°³É WebXml£¬²¢ÉèÖà Context
×¢£º
ɨÃè web Ó¦ÓÃºÍ jar ÖеÄ×¢½â(Filter¡¢Listener¡¢Servlet)¾ÍÊÇÉÏÊö²½ÖèÖнøÐеġ£
ÈÝÆ÷µÄ¶¨ÆÚÖ´ÐУºbackgroundProcess£¬ÓÉ ContainerBase À´ÊµÏֵ쬲¢ÇÒÖ»ÓÐÔÚ¶¥²ãÈÝÆ÷
ÖвŻῪÆôÏ̡߳£(backgroundProcessorDelay=10 ±ê־λÀ´¿ØÖÆ)
**Servlet ÉúÃüÖÜÆÚ **

Servlet ÊÇÓà Java ±àдµÄ·þÎñÆ÷¶Ë³ÌÐò¡£ÆäÖ÷Òª¹¦ÄÜÔÚÓÚ½»»¥Ê½µØä¯ÀÀºÍÐÞ¸ÄÊý¾Ý£¬Éú³É¶¯Ì¬
Web ÄÚÈÝ¡£
ÇëÇóµ½´ï server ¶Ë£¬server ¸ù¾Ý url Ó³Éäµ½ÏàÓ¦µÄ Servlet
ÅÐ¶Ï Servlet ʵÀýÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò¼ÓÔØºÍʵÀý»¯ Servlet ²¢µ÷Óà init ·½·¨
Server ·Ö±ð´´½¨ Request ºÍ Response ¶ÔÏ󣬵÷Óà Servlet ʵÀýµÄ service
·½·¨(service ·½·¨ ÄÚ²¿»á¸ù¾Ý http ÇëÇó·½·¨ÀàÐ͵÷ÓÃÏàÓ¦µÄ doXXX ·½·¨)
doXXX ·½·¨ÄÚΪҵÎñÂ߼ʵÏÖ£¬´Ó Request ¶ÔÏó»ñÈ¡ÇëÇó²ÎÊý£¬´¦ÀíÍê±ÏÖ®ºó½«½á¹ûͨ¹ý response
¶ÔÏ󷵻ظøµ÷Ó÷½
µ± Server ²»ÔÙÐèÒª Servlet ʱ(Ò»°ãµ± Server ¹Ø±Õʱ)£¬Server µ÷ÓÃ
Servlet µÄ destroy() ·½ ·¨¡£
load on startup
µ±ÖµÎª 0 »òÕß´óÓÚ 0 ʱ£¬±íʾÈÝÆ÷ÔÚÓ¦ÓÃÆô¶¯Ê±¾Í¼ÓÔØÕâ¸ö servlet; µ±ÊÇÒ»¸ö¸ºÊýʱ»òÕßûÓÐÖ¸¶¨Ê±£¬ÔòָʾÈÝÆ÷ÔÚ¸Ã
servlet ±»Ñ¡Ôñʱ²Å¼ÓÔØ; ÕýÊýµÄֵԽС£¬Æô¶¯¸Ã servlet µÄÓÅÏȼ¶Ô½¸ß;
single thread model
ÿ´Î·ÃÎÊ servlet£¬Ð½¨ servlet ʵÌå¶ÔÏ󣬵«²¢²»Äܱ£Ö¤Ḭ̈߳²È«£¬Í¬Ê± tomcat
»áÏÞÖÆ servlet µÄʵÀýÊýÄ¿ ×î¼Ñʵ¼ù£º²»ÒªÊ¹ÓøÃÄ£ÐÍ£¬servlet Öв»ÒªÓÐÈ«¾Ö±äÁ¿
**ÇëÇó´¦Àí¹ý³Ì **

¸ù¾Ý server.xml ÅäÖõÄÖ¸¶¨µÄ connector ÒÔ¼°¶Ë¿Ú¼àÌý http¡¢»òÕß ajp
ÇëÇó
ÇëÇóµ½À´Ê±½¨Á¢Á¬½Ó,½âÎöÇëÇó²ÎÊý,´´½¨ Request ºÍ Response ¶ÔÏó,µ÷Óö¥²ãÈÝÆ÷ pipeline
µÄ invoke ·½·¨
ÈÝÆ÷Ö®¼ä²ã²ãµ÷ÓÃ,×îÖÕµ÷ÓÃÒµÎñ servlet µÄ service ·½·¨
Connector ½« response Á÷ÖеÄÊý¾Ýдµ½ socket ÖÐ
**Pipeline Óë Valve **

Pipeline ¿ÉÒÔÀí½âΪÏÖʵÖеĹܵÀ,Valve Ϊ¹ÜµÀÖеķ§ÃÅ,Request ºÍ Response
¶ÔÏóÔڹܵÀÖÐ ¾¹ý¸÷¸ö·§ÃŵĴ¦ÀíºÍ¿ØÖÆ¡£
ÿ¸öÈÝÆ÷µÄ¹ÜµÀÖж¼ÓÐÒ»¸ö±Ø²»¿ÉÉÙµÄ basic valve,ÆäËûµÄ¶¼ÊÇ¿ÉÑ¡µÄ,basic valve
ÔڹܵÀÖÐ×î ºóµ÷ÓÃ,ͬʱ¸ºÔðµ÷ÓÃ×ÓÈÝÆ÷µÄµÚÒ»¸ö valve¡£
Valve ÖÐÖ÷ÒªµÄÈý¸ö·½·¨:setNext¡¢getNext¡¢invoke;valve Ö®¼äµÄ¹ØÏµÊǵ¥ÏòÁ´Ê½½á¹¹,±¾Éí
invoke ·½·¨Öлáµ÷ÓÃÏÂÒ»¸ö valve µÄ invoke ·½·¨¡£
¸÷²ãÈÝÆ÷¶ÔÓ¦µÄ basic valve ·Ö±ðÊÇ StandardEngineValve¡¢StandardHostValve¡¢
StandardContextValve¡¢StandardWrapperValve¡£

JSP ÉúÃüÖÜÆÚ
±àÒë½×¶Î:servlet ÈÝÆ÷±àÒë servlet Ô´ÎÄ ¼þ,Éú³É servlet Àà
³õʼ»¯½×¶Î:¼ÓÔØÓë JSP ¶ÔÓ¦µÄ servlet Àà, ´´½¨ÆäʵÀý,²¢µ÷ÓÃËüµÄ³õʼ»¯·½·¨
Ö´Ðн׶Î:µ÷ÓÃÓë JSP ¶ÔÓ¦µÄ servlet ʵÀýµÄ ·þÎñ·½·¨
Ïú»Ù½×¶Î:µ÷ÓÃÓë JSP ¶ÔÓ¦µÄ servlet ʵÀýµÄ Ïú»Ù·½·¨,È»ºóÏú»Ù servlet ʵÀý
JSPÔªËØ ´úÂëÆ¬¶Î£º <% ´úÂëÆ¬¶Î %> JSPÉùÃ÷£º <%! declaration;
[ declaration; ]+ ... %> JSP±í´ïʽ£º<%= ±í´ïʽ %>
JSP×¢ÊÍ£º <%-- ×¢ÊÍ --%> JSPÖ¸Á <%@ directive
attribute=¡°value¡± %> JSPÐÐΪ£º <jsp:action_name
attribute=¡°value¡± /> HTMLÔªËØ£º html/head/body/div/p/¡
JSPÒþʽ¶ÔÏó£ºrequest¡¢response¡¢out¡¢session¡¢application¡¢config¡¢
pageContext¡¢page¡¢Exception
**JSP ÔªËØËµÃ÷ ** ´úÂëÆ¬¶Î:°üº¬ÈÎÒâÁ¿µÄ Java Óï¾ä¡¢±äÁ¿¡¢·½·¨»ò±í´ïʽ; JSP
ÉùÃ÷:Ò»¸öÉùÃ÷Óï¾ä¿ÉÒÔÉùÃ÷Ò»¸ö»ò¶à¸ö±äÁ¿¡¢·½·¨,¹©ºóÃæµÄ Java ´úÂëʹÓÃ; JSP ±í´ïʽ:Êä³ö
Java ±í´ïʽµÄÖµ,String ÐÎʽ; JSP ×¢ÊÍ:Ϊ´úÂë×÷×¢ÊÍÒÔ¼°½«Ä³¶Î´úÂë×¢Ê͵ô JSP
Ö¸Áî:ÓÃÀ´ÉèÖÃÓëÕû¸ö JSP Ò³ÃæÏà¹ØµÄÊôÐÔ, <%@ page ... %>¶¨ÒåÒ³ÃæµÄÒÀÀµÊôÐÔ,±ÈÈç
language¡¢contentType¡¢errorPage¡¢ isErrorPage¡¢import¡¢isThreadSafe¡¢session
µÈµÈ <%@ include ... %>°üº¬ÆäËûµÄ JSP Îļþ¡¢HTML Îļþ»òÎı¾Îļþ,ÊǸÃ
JSP ÎļþµÄÒ»²¿·Ö,»á ±»Í¬Ê±±àÒëÖ´ÐÐ <%@ taglib ... %>ÒýÈë±êÇ©¿âµÄ¶¨Òå,¿ÉÒÔÊÇ×Ô¶¨Òå±êÇ©
JSP ÐÐΪ:jsp:include¡¢jsp:useBean¡¢jsp:setProperty¡¢jsp:getProperty¡¢jsp:forward
**Jsp ½âÎö¹ý³Ì **

´úÂëÆ¬¶Î:ÔÚ_jspService()·½·¨ÄÚÖ±½ÓÊä³ö
JSP ÉùÃ÷: ÔÚ servlet ÀàÖнøÐÐÊä³ö
JSP ±í´ïʽ:ÔÚ_jspService()·½·¨ÄÚÖ±½ÓÊä³ö
JSP ×¢ÊÍ:Ö±½ÓºöÂÔ,²»Êä³ö
JSP Ö¸Áî:¸ù¾Ý²»Í¬Ö¸Áî½øÐÐÇø·Ö,include:¶ÔÒýÈëµÄÎļþ½øÐнâÎö;page Ïà¹ØµÄÊôÐÔ»á×öΪ
JSP µÄÊôÐÔ,Ó°ÏìµÄÊǽâÎöºÍÇëÇó´¦ÀíʱµÄÐÐΪ
JSP ÐÐΪ:²»Í¬µÄÐÐΪÓв»Í¬µÄ´¦Àí·½Ê½,jsp:useBean ΪÀý,»á´Ó pageContext
¸ù¾Ý scope µÄ Àà±ð»ñÈ¡ bean ¶ÔÏó,Èç¹ûûÓлᴴ½¨ bean,ͬʱ´æµ½ÏàÓ¦ scope
µÄ pageContext ÖÐ
HTML:ÔÚ_jspService()·½·¨ÄÚÖ±½ÓÊä³ö
JSP Òþʽ¶ÔÏó:ÔÚ_jspService()·½·¨»á½øÐÐÉùÃ÷,Ö»ÄÜÔÚ·½·¨ÖÐʹÓÃ;
Connector

Http:HTTP Êdz¬Îı¾´«ÊäÐÒé,Êǿͻ§¶Ëä¯ÀÀÆ÷»òÆäËû³ÌÐòÓë Web ·þÎñÆ÷Ö®¼äµÄÓ¦ÓòãͨÐÅÐ
Òé AJP:Apache JServ ÐÒé(AJP)ÊÇÒ»ÖÖ¶þ½øÖÆÐÒé,רÃÅ´úÀí´Ó Web ·þÎñÆ÷µ½Î»ÓÚºó¶ËµÄÓ¦ÓÃ
³ÌÐò·þÎñÆ÷µÄÈëÕ¾ÇëÇó ×èÈû IO
·Ç×èÈû IO

** IO¶à·¸´ÓÃ**

×èÈûÓë·Ç×èÈûµÄÇø±ðÔÚÓÚ½øÐжÁ²Ù×÷ºÍд²Ù×÷µÄϵͳµ÷ÓÃʱ£¬Èç¹û´ËʱÄÚºË̬ûÓÐÊý¾Ý¿É¶Á»òÕßûÓлº³å¿Õ¼ä¿Éдʱ£¬ÊÇ·ñ×èÈû¡£
IO¶à·¸´Óõĺô¦ÔÚÓÚ¿Éͬʱ¼àÌý¶à¸ösocketµÄ¿É¶ÁºÍ¿Éдʼþ£¬ÕâÑù¾ÍÄÜʹµÃÓ¦ÓÿÉÒÔͬʱ¼àÌý¶à¸ösocket£¬ÊÍ·ÅÁËÓ¦ÓÃÏß³Ì×ÊÔ´¡£
Tomcat¸÷ÀàConnector¶Ô±È

ConnectorµÄʵÏÖģʽÓÐÈýÖÖ£¬·Ö±ðÊÇBIO¡¢NIO¡¢APR£¬¿ÉÒÔÔÚserver.xmlÖÐÖ¸¶¨¡£
JIO£ºÓÃjava.io±àдµÄTCPÄ£¿é£¬×èÈûIO
NIO£ºÓÃjava.nio±àдµÄTCPÄ£¿é£¬·Ç×èÈûIO£¬£¨IO¶à·¸´Óã©
APR£ºÈ«³ÆApache Portable Runtime£¬Ê¹ÓÃJNIµÄ·½Ê½À´½øÐжÁÈ¡ÎļþÒÔ¼°½øÐÐÍøÂç´«Êä
Apache Portable RuntimeÊÇÒ»¸ö¸ß¶È¿ÉÒÆÖ²µÄ¿â£¬ËüÊÇApache HTTP Server
2.xµÄºËÐÄ¡£ APR¾ßÓÐÐí¶àÓÃ;£¬°üÀ¨·ÃÎʸ߼¶IO¹¦ÄÜ£¨Èçsendfile£¬epollºÍOpenSSL£©£¬²Ù×÷ϵͳ¼¶¹¦ÄÜ£¨Ëæ»úÊýÉú³É£¬ÏµÍ³×´Ì¬µÈ£©ºÍ±¾µØ½ø³Ì´¦Àí£¨¹²ÏíÄڴ棬NT¹ÜµÀºÍUnixÌ×½Ó×Ö£©¡£
±í¸ñÖÐ×ֶκ¬Òå˵Ã÷£º
Support Polling£ºÊÇ·ñÖ§³Ö»ùÓÚIO¶à·¸´ÓõÄsocketʼþÂÖѯ
Polling Size£ºÂÖѯµÄ×î´óÁ¬½ÓÊý
Wait for next Request£ºÔڵȴýÏÂÒ»¸öÇëÇóʱ£¬´¦ÀíÏß³ÌÊÇ·ñÊÍ·Å£¬BIOÊÇûÓÐÊͷŵģ¬ËùÒÔÔÚkeep-alive=trueµÄÇé¿öÏ´¦ÀíµÄ²¢·¢Á¬½ÓÊýÓÐÏÞ
Read Request Headers£ºÓÉÓÚrequest headerÊý¾Ý½ÏÉÙ£¬¿ÉÒÔÓÉÈÝÆ÷Ìáǰ½âÎöÍê±Ï£¬²»ÐèÒª×èÈû
Read Request Body£º¶ÁÈ¡request bodyµÄÊý¾ÝÊÇÓ¦ÓÃÒµÎñÂß¼µÄÊÂÇ飬ͬʱServletµÄÏÞÖÆ£¬ÊÇÐèÒª×èÈû¶ÁÈ¡µÄ
Write Response£º¸ú¶ÁÈ¡request bodyµÄÂß¼ÀàËÆ£¬Í¬ÑùÐèÒª×èÈûд
NIO´¦ÀíÏà¹ØÀà

AcceptorÏ̸߳ºÔð½ÓÊÕÁ¬½Ó£¬µ÷ÓÃaccept·½·¨×èÈû½ÓÊÕ½¨Á¢µÄÁ¬½Ó£¬²¢¶Ôsocket½øÐзâ×°³ÉPollerEvent£¬Ö¸¶¨×¢²áµÄʼþΪop_read£¬²¢·ÅÈëµ½EventQueue¶ÓÁÐÖУ¬PollerEventµÄrun·½·¨Âß¼µÄÊǽ«Selector×¢²áµ½socketµÄÖ¸¶¨Ê¼þ£»
PollerÏ̴߳ÓEventQueue»ñÈ¡PollerEvent£¬²¢Ö´ÐÐPollerEventµÄrun·½·¨£¬µ÷ÓÃSelectorµÄselect·½·¨£¬Èç¹ûÓпɶÁµÄSocketÔò´´½¨Http11NioProcessor£¬·ÅÈëµ½Ï̳߳ØÖÐÖ´ÐУ»
CoyoteAdapterÊÇConnectorµ½ContainerµÄÊÊÅäÆ÷£¬Http11NioProcessorµ÷ÓÃÆäÌṩµÄservice·½·¨£¬ÄÚ²¿´´½¨RequestºÍResponse¶ÔÏ󣬲¢µ÷ÓÃ×î¶¥²ãÈÝÆ÷µÄPipelineÖеĵÚÒ»¸öValveµÄinvoke·½·¨
MapperÖ÷Òª´¦Àíhttp url µ½servletµÄÓ³É乿ÔòµÄ½âÎö£¬¶ÔÍâÌṩmap·½·¨
NIO ConnectorÖ÷Òª²ÎÊý

Comet
CometÊÇÒ»ÖÖÓÃÓÚwebµÄÍÆËͼ¼Êõ£¬ÄÜʹ·þÎñÆ÷ʵʱµØ½«¸üеÄÐÅÏ¢´«Ë͵½¿Í»§¶Ë£¬¶øÎÞÐë¿Í»§¶Ë·¢³öÇëÇó
ÔÚWebSocket³öÀ´Ö®Ç°£¬Èç¹û²»Ê¹ÓÃcomet£¬Ö»ÄÜͨ¹ýä¯ÀÀÆ÷¶ËÂÖѯServerÀ´Ä£ÄâʵÏÖ·þÎñÆ÷¶ËÍÆËÍ¡£
CometÖ§³ÖservletÒì²½´¦ÀíIO£¬µ±Á¬½ÓÉÏÊý¾Ý¿É¶Áʱ´¥·¢Ê¼þ£¬²¢Ò첽дÊý¾Ý(×èÈû)

TomcatҪʵÏÖComet£¬Ö»Ðè¼Ì³ÐHttpServletͬʱ£¬ÊµÏÖCometProcessor½Ó¿Ú
Begin£ºÐµÄÇëÇóÁ¬½Ó½ÓÈëµ÷Ó㬿ɽøÐÐÓëRequestºÍResponseÏà¹ØµÄ¶ÔÏó³õʼ»¯²Ù×÷£¬²¢±£´æresponse¶ÔÏó£¬ÓÃÓÚºóÐøÐ´ÈëÊý¾Ý
Read£ºÇëÇóÁ¬½ÓÓÐÊý¾Ý¿É¶Áʱµ÷ÓÃ
End£ºµ±Êý¾Ý¿ÉÓÃʱ£¬Èç¹û¶ÁÈ¡µ½Îļþ½áÊø»òÕßresponse±»¹Ø±ÕʱÔò±»µ÷ÓÃ
Error£ºÔÚÁ¬½ÓÉÏ·¢ÉúÒ쳣ʱµ÷Óã¬Êý¾Ý¶ÁÈ¡Òì³£¡¢Á¬½Ó¶Ï¿ª¡¢´¦ÀíÒì³£¡¢socket³¬Ê±
Note£º
Read£ºÔÚpostÇëÇóÓÐÊý¾Ý£¬µ«ÔÚbeginʼþÖÐûÓд¦Àí£¬Ôò»áµ÷ÓÃread£¬Èç¹ûreadûÓжÁÈ¡Êý¾Ý£¬Ôڻᴥ·¢Error»Øµ÷£¬¹Ø±Õsocket
End£ºµ±socket³¬Ê±£¬²¢ÇÒresponse±»¹Ø±ÕʱҲ»áµ÷Óã»server±»¹Ø±Õʱµ÷ÓÃ
Error£º³ýÁËsocket³¬Ê±²»»á¹Ø±Õsocket£¬ÆäËû¶¼»á¹Ø±Õsocket
EndºÍErrorʱ¼ä´¥·¢Ê±Ó¦¹Ø±Õµ±Ç°comet»á»°£¬¼´µ÷ÓÃCometEventµÄclose·½·¨ Note£ºÔÚʼþ´¥·¢Ê±Òª×öºÃḬ̈߳²È«µÄ²Ù×÷
Òì²½Servlet

´«Í³Á÷³Ì£º
Ê×ÏÈ£¬Servlet ½ÓÊÕµ½ÇëÇóÖ®ºó£¬requestÊý¾Ý½âÎö£»
½Ó×Å£¬µ÷ÓÃÒµÎñ½Ó¿ÚµÄijЩ·½·¨£¬ÒÔÍê³ÉÒµÎñ´¦Àí£»
×îºó£¬¸ù¾Ý´¦ÀíµÄ½á¹ûÌá½»ÏìÓ¦£¬Servlet Ï߳̽áÊø
Òì²½´¦ÀíÁ÷³Ì£º
¿Í»§¶Ë·¢ËÍÒ»¸öÇëÇó
ServletÈÝÆ÷·ÖÅäÒ»¸öÏß³ÌÀ´´¦ÀíÈÝÆ÷ÖеÄÒ»¸öservlet
servletµ÷ÓÃrequest.startAsync()£¬±£´æAsyncContext, È»ºó·µ»Ø
Èκη½Ê½´æÔÚµÄÈÝÆ÷Ï̶߳¼½«Í˳ö£¬µ«ÊÇresponseÈÔÈ»±£³Ö¿ª·Å
ÒµÎñÏß³ÌʹÓñ£´æµÄAsyncContextÀ´Íê³ÉÏìÓ¦£¨Ï̳߳أ©
¿Í»§¶ËÊÕµ½ÏìÓ¦
Servlet Ï߳̽«ÇëÇóת½»¸øÒ»¸öÒì²½Ïß³ÌÀ´Ö´ÐÐÒµÎñ´¦Àí£¬Ï̱߳¾Éí·µ»ØÖÁÈÝÆ÷£¬´Ëʱ Servlet
»¹Ã»ÓÐÉú³ÉÏìÓ¦Êý¾Ý£¬Òì²½Ï̴߳¦ÀíÍêÒµÎñÒԺ󣬿ÉÒÔÖ±½ÓÉú³ÉÏìÓ¦Êý¾Ý£¨Òì²½Ïß³ÌÓµÓÐ ServletRequest
ºÍ ServletResponse ¶ÔÏóµÄÒýÓã©
ΪʲôwebÓ¦ÓÃÖÐÖ§³ÖÒì²½£¿
ÍÆ³öÒì²½£¬Ö÷ÒªÊÇÕë¶ÔÄÇЩ±È½ÏºÄʱµÄÇëÇ󣺱ÈÈçÒ»´Î»ºÂýµÄÊý¾Ý¿â²éѯ£¬Ò»´ÎÍⲿREST APIµ÷ÓÃ,
»òÕßÊÇÆäËûһЩI/OÃܼ¯ÐͲÙ×÷¡£ÕâÖÖºÄʱµÄÇëÇó»áºÜ¿ìµÄºÄ¹âServletÈÝÆ÷µÄÏ̳߳أ¬¼Ì¶øÓ°Ïì¿ÉÀ©Õ¹ÐÔ¡£
Note£º´Ó¿Í»§¶ËµÄ½Ç¶ÈÀ´¿´£¬requestÈÔÈ»ÏñÈÎºÎÆäËûµÄHTTPµÄrequest-response½»»¥Ò»Ñù£¬Ö»ÊǺķÑÁ˸ü³¤µÄʱ¼ä¶øÒÑ
Ò첽ʼþ¼àÌý
onStartAsync£ºRequestµ÷ÓÃstartAsync·½·¨Ê±´¥·¢
onComplete£ºsyncContextµ÷ÓÃcomplete·½·¨Ê±´¥·¢
onError£º´¦ÀíÇëÇóµÄ¹ý³Ì³öÏÖÒ쳣ʱ´¥·¢
onTimeout£ºsocket³¬Ê±´¥·¢
Note : onError/ onTimeout´¥·¢ºó£¬»á½ô½Óׯص÷onComplete onComplete
Ö´Ðк󣬾Ͳ»¿ÉÔÙ²Ù×÷requestºÍresponse |