Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ó²ºËͼ½â Tomcat ÕûÌå¼Ü¹¹
 
×÷Õߣºrhsphere
  1819  次浏览      31
 2021-9-16
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜTomcatµÄ×ÜÌå¼Ü¹¹,Á¬½ÓÆ÷ Connector£¬ÈÝÆ÷ Container£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚÔÆÊ±´ú¼Ü¹¹£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

×ÜÌå¼Ü¹¹

ºËÐŦÄÜ£º

1.´¦Àí socket Á¬½Ó£¬¸ºÔð½«ÍøÂç×Ö½ÚÁ÷Óë Request ºÍ Response ¶ÔÏóµÄת»¯£»

2.¼ÓÔØºÍ¹ÜÀí Servlet£¬ÒÔ¼°¾ßÌå´¦Àí Request ÇëÇó£»

3.Tomcat Ö§³ÖµÄ io Ä£ÐÍÓÐ NIO¡¢NIO2¡¢APR£¬Tomcat Ö§³ÖµÄÓ¦ÓòãЭÒéÓÐ http1.1 ajp http2.0¡£

Tomcat ×î¶¥²ãÊÇ server£¬Ò»¸ö server Óжà¸ö service£¬Ò»¸ö service Óжà¸öÁ¬½ÓÆ÷ºÍÒ»¸öÈÝÆ÷£¬Á¬½ÓÆ÷ºÍÈÝÆ÷Ö®¼äͨ¹ý ServletRequest ºÍ ServletResponse ͨÐÅ¡£

ͨ¹ý×éºÏģʽ¡¢Ä£°å·½·¨¡¢¹Û²ìÕßģʽºÍ¹Ç¼Ü³éÏóÀ࣬tomcat ¶¨ÒåÁË»ùÀà LifeCycleBean ʵÏÖ LifeCycle ½Ó¿Ú£¬°Ñ¹«¹²µÄÂß¼­£¬ÉúÃüÖÜÆÚ״̬ת±äºÍά»¤¡¢ÉúÃüʼþµÄ´¥·¢ºÍ¼àÌýÆ÷µÄÌí¼Óɾ³ý£¬×ÓÀฺÔðʵÏÖ×Ô¼ºµÄ init¡¢stop ºÍ start µÈ·½·¨¡£

tomcat ×Ô¶¨ÒåÁ˼àÌýÆ÷£»

@WebListener ×¢½â£¬¶¨Òå×Ô¼ºµÄ¼àÌýÆ÷£»

StandardServer¡¢StandardService µÈÊÇ Server ºÍ Service ×é¼þµÄ¾ßÌåʵÏÖÀ࣬ËüÃǶ¼¼Ì³ÐÁË LifecycleBase¡£

StandardEngine¡¢StandardHost¡¢StandardContext ºÍ StandardWrapper ÊÇÏàÓ¦ÈÝÆ÷×é¼þµÄ¾ßÌåʵÏÖÀ࣬ÒòΪËüÃǶ¼ÊÇÈÝÆ÷£¬ËùÒԼ̳ÐÁË ContainerBase ³éÏó»ùÀ࣬¶ø ContainerBase ʵÏÖÁË Container ½Ó¿Ú£¬Ò²¼Ì³ÐÁË LifecycleBase À࣬ËüÃǵÄÉúÃüÖÜÆÚ¹ÜÀí½Ó¿ÚºÍ¹¦ÄܽӿÚÊÇ·Ö¿ªµÄ¡£

Á¬½ÓÆ÷ Connector

Á¬½ÓÆ÷½øÒ»²½Ï¸»¯£º

¼àÌýÍøÂç¶Ë¿Ú£»

½ÓÊÜÍøÂçÇëÇó£»

¶ÁÈ¡ÍøÂç×Ö½ÚÁ÷£»

¸ù¾ÝÓ¦ÓòãЭÒé½âÎö×Ö½ÚÁ÷£¬Éú³ÉͳһµÄ tomcat request ºÍ tomcat response ¶ÔÏó£»

½« tomcat request ¶ÔÏóת³É servletRequest£»

µ÷Óà servlet ÈÝÆ÷£¬µÃµ½ servletResponse£»

½« servletResponse ת³É tomcat response£»

½« tomcat response ת³ÉÍøÂç×Ö½ÚÁ÷£»

½«ÏìÓ¦×Ö½ÚÁ÷д»Ø¸øä¯ÀÀÆ÷£»

°´ÕÕ¸ßÄھ۵ŦÄÜ»®·Ö£º

ÍøÂçͨÐÅ£»

Ó¦ÓòãЭÒé½âÎö£»

tomcat request/response Óë servlet request/response µÄת»»£»

×é¼þͨ¹ý½Ó¿Ú½»»¥£¬ºÃ´¦ÊÇ·â×°±ä»¯¡£Endpoint ¸ºÔðÌṩ×Ö½ÚÁ÷¸ø Processor£¬Processor ¸ºÔðÌṩ tomcat request ¶ÔÏó¸ø Adapter£¬Adapter¸ºÔðÌṩ Servlet Request ¸øÈÝÆ÷¡£

ÆäÖÐ Endpoint ºÍ Processor ³éÏó×é×°ÔÚÒ»ÆðÐγÉÁË ProtocolHandler ×é¼þ¡£

ProtocolHandler

Endpoint

½Ó¿Ú£¬³éÏóʵÏÖÀàÊÇ AbstractEndpoint£¬¾ßÌå×ÓÀàÔÚ NioEndpoint ºÍ Nio2Endpoint£¬ÆäÖÐÁ½¸öÖØÒª×é¼þ£ºAcceptor ºÍ SocketProcessor¡£

Acceptor ÓÃÓÚ¼àÌý Socket Á¬½ÓÇëÇó£¬SocketProcessor ÓÃÓÚ´¦ÀíÊÕµ½µÄ Socket ÇëÇó£¬Ìá½»µ½Ïß³Ì³Ø Executor ´¦Àí¡£

Processor

½ÓÊÕ Endpoint µÄ socket£¬¶ÁÈ¡×Ö½ÚÁ÷½âÎö³É tomcat request ºÍ response£¬Í¨¹ý adapter ½«ÆäÌá½»µ½ÈÝÆ÷´¦Àí¡£Processor µÄ¾ßÌåʵÏÖÀà AjpProcessor¡¢Http11Processor ʵÏÖÁËÌØ¶¨Ð­ÒéµÄ½âÎö·½·¨ºÍÇëÇó´¦Àí·½Ê½¡£

Endpoint ½ÓÊÕµ½ socket Á¬½Óºó£¬Éú³ÉÒ»¸ö socketProcessor ½»¸øÏ̳߳ش¦Àí£¬run ·½·¨»áµ÷Óà Processor ½âÎöÓ¦ÓòãЭÒ飬Éú³É tomcat request ºó£¬µ÷Óà adapter µÄ service ·½·¨¡£

Adapter

ProtocolHandler ½Ó¿Ú¸ºÔð½âÎöÇëÇóÉú³É tomcat requst£¬CoyoteAdapter µÄ service ·½·¨£¬½« Tomcat Request ¶ÔÏó£¬×ª³É ServletRequest£¬ÔÙµ÷Óà service ·½·¨¡£

ÈÝÆ÷ Container

ÈÝÆ÷µÄ²ã´Î½á¹¹

¸¸×Ó¹ØÏµµÄ Engine¡¢Host¡¢Context¡¢Wrapper ºÍ Servlet¡£Context ±íʾ web Ó¦ÓóÌÐò¡¢wrapper ±íʾ servlet¡¢context Óжà¸ö wrapper£¬host Ò²Óжà¸ö context¡£

Host ´ú±íµÄÊÇÒ»¸öÐéÄâÖ÷»ú£¬»òÕß˵һ¸öÕ¾µã£¬¿ÉÒÔ¸ø Tomcat ÅäÖöà¸öÐéÄâÖ÷»úµØÖ·£¬¶øÒ»¸öÐéÄâÖ÷»úÏ¿ÉÒÔ²¿Êð¶à¸ö Web Ó¦ÓóÌÐò£»Engine ±íʾÒýÇæ£¬ÓÃÀ´¹ÜÀí¶à¸öÐéÄâÕ¾µã£¬Ò»¸ö Service ×î¶àÖ»ÄÜÓÐÒ»¸ö Engine¡£

ÈÝÆ÷ͨ¹ý Pipeline-Valve ÔðÈÎÁ´£¬¶ÔÇëÇóÒ»´Î´¦Àí£¬invoke ´¦Àí·½·¨£¬Ã¿¸öÈÝÆ÷¶¼ÓÐÒ»¸ö Pipeline£¬´¥·¢µÚÒ»¸ö Valve£¬Õâ¸öÈÝÆ÷µÄ valve ¶¼»á±»µ÷µ½£¬²»Í¬ÈÝÆ÷Ö®¼äͨ¹ý Pipeline µÄ getBasic ·½·¨£¬¸ºÔðµ÷ÓÃϲãÈÝÆ÷µÄµÚÒ»¸ö Valve¡£

Õû¸öµ÷ÓÃÁ¬ÓÉÁ¬½ÓÆ÷ÖÐµÄ adapter ´¥·¢£¬µ÷Óà engine ÖеĵÚÒ»¸ö Valve¡£

// Calling the container
2connector.getService().getContainer().
getPipeline().getFirst().invoke(request, response);

wrapper ÈÝÆ÷µÄ×îºóÒ»¸ö valve ´´½¨Ò»¸ö filter Á´£¬²¢µ÷Óà doFilter ·½·¨£¬×îÖÕ»áµ÷Óõ½ servlet µÄ service ·½·¨¡£

final class StandardWrapperValve
extends ValveBase {

@Override
public final void invoke(Request request, Response response)
throws IOException, ServletException {
// ...

ApplicationFilterChain filterChain =
ApplicationFilterFactory.createFilterChain(request , wrapper, servlet);
// Call the filter chain for this request
// NOTE: This also calls the servlet's service () method
Container container = this.container;
try {
if ((servlet != null) && (filterChain != null)) {
// Swallow output if needed
if (context.getSwallowOutput()) {
try {
SystemLogHandler.startCapture();
if (request.isAsyncDispatching()) {
request.getAsyncContextInternal().doInternalDispatch ();
} else {

// dofilter
filterChain.doFilter(request.getRequest(),
response.getResponse());
}
} finally {
String log = SystemLogHandler.stopCapture();
if (log != null && log.length() > 0) {
context.getLogger().info(log);
}
}
} else {
if (request.isAsyncDispatching()) {
request.getAsyncContextInternal().doInternalDispatch();
} else {
// dofilter
filterChain.doFilter
(request.getRequest(), response.getResponse());
}
}

}
} catch() {
// ...
}
}
}

ServletContext ÊÇ tomcat ÖеÄÒ»¸ö³ÉÔ±±äÁ¿£¬spring ÖÐµÄ ApplicationContext ÊÇ servlet ¹æ·¶ÖÐµÄ ServletContext ÊôÐÔ¡£

 
   
1819 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
JavaÐéÄâ»ú¼Ü¹¹
JVM¡ª¡ªJavaÐéÄâ»ú¼Ü¹¹
JavaÈÝÆ÷Ïê½â
Java½ø½×--ÉîÈëÀí½âArrayListʵÏÖÔ­Àí
Java²¢·¢ÈÝÆ÷£¬µ×²ãÔ­ÀíÉîÈë·ÖÎö
×îпγÌ
java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
SpringBoot&Cloud¡¢JavaSSM¿ò¼Ü
Spring Boot Åàѵ
³É¹¦°¸Àý
¹úÄÚÖªÃûÒøÐÐ Spring+SpringBoot+Cloud+MVC
±±¾© Java±à³Ì»ù´¡ÓëÍøÒ³¿ª·¢»ù´¡
±±¾© Struts+Spring
»ªÏÄ»ù½ð ActiveMQ Ô­Àí
ijÃñº½¹« Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢