Tomcat-一个请求的流程


NIO作为connector的堆栈信息
NIO2作为connector的堆栈信息
doFilterInternal:103, RequestContextFilter (org.springframework.web.filter)
doFilter:107, OncePerRequestFilter (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
doFilterInternal:92, FormContentFilter (org.springframework.web.filter)
doFilter:107, OncePerRequestFilter (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
doFilterInternal:93, HiddenHttpMethodFilter (org.springframework.web.filter)
doFilter:107, OncePerRequestFilter (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
doFilterInternal:200, CharacterEncodingFilter (org.springframework.web.filter)
doFilter:107, OncePerRequestFilter (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
invoke:200, StandardWrapperValve (org.apache.catalina.core)
invoke:96, StandardContextValve (org.apache.catalina.core)
invoke:490, AuthenticatorBase (org.apache.catalina.authenticator)
invoke:139, StandardHostValve (org.apache.catalina.core)
invoke:92, ErrorReportValve (org.apache.catalina.valves)
invoke:74, StandardEngineValve (org.apache.catalina.core)
service:343, CoyoteAdapter (org.apache.catalina.connector)
service:408, Http11Processor (org.apache.coyote.http11)
process:66, AbstractProcessorLight (org.apache.coyote)
process:834, AbstractProtocol$ConnectionHandler (org.apache.coyote)
doRun:1415, NioEndpoint$SocketProcessor (org.apache.tomcat.util.net)
run:49, SocketProcessorBase (org.apache.tomcat.util.net)
runWorker:1142, ThreadPoolExecutor (java.util.concurrent)
run:617, ThreadPoolExecutor$Worker (java.util.concurrent)
run:61, TaskThread$WrappingRunnable (org.apache.tomcat.util.threads)
run:745, Thread (java.lang)


invoke0(Method, Object, Object[]):-1, NativeMethodAccessorImpl (sun.reflect), NativeMethodAccessorImpl.java
invoke(Object, Object[]):62, NativeMethodAccessorImpl (sun.reflect), NativeMethodAccessorImpl.java
invoke(Object, Object[]):43, DelegatingMethodAccessorImpl (sun.reflect), DelegatingMethodAccessorImpl.java
invoke(Object, Object[]):498, Method (java.lang.reflect), Method.java
doInvoke(Object[]):209, InvocableHandlerMethod (org.springframework.web.method.support), InvocableHandlerMethod.java
invokeForRequest(NativeWebRequest, ModelAndViewContainer, Object[]):136, InvocableHandlerMethod (org.springframework.web.method.support), InvocableHandlerMethod.java
invokeAndHandle(ServletWebRequest, ModelAndViewContainer, Object[]):102, ServletInvocableHandlerMethod (org.springframework.web.servlet.mvc.method.annotation), ServletInvocableHandlerMethod.java
invokeHandlerMethod(HttpServletRequest, HttpServletResponse, HandlerMethod):877, RequestMappingHandlerAdapter (org.springframework.web.servlet.mvc.method.annotation), RequestMappingHandlerAdapter.java
handleInternal(HttpServletRequest, HttpServletResponse, HandlerMethod):783, RequestMappingHandlerAdapter (org.springframework.web.servlet.mvc.method.annotation), RequestMappingHandlerAdapter.java
handle(HttpServletRequest, HttpServletResponse, Object):87, AbstractHandlerMethodAdapter (org.springframework.web.servlet.mvc.method), AbstractHandlerMethodAdapter.java
doDispatch(HttpServletRequest, HttpServletResponse):991, DispatcherServlet (org.springframework.web.servlet), DispatcherServlet.java
doService(HttpServletRequest, HttpServletResponse):925, DispatcherServlet (org.springframework.web.servlet), DispatcherServlet.java
processRequest(HttpServletRequest, HttpServletResponse):974, FrameworkServlet (org.springframework.web.servlet), FrameworkServlet.java
doGet(HttpServletRequest, HttpServletResponse):866, FrameworkServlet (org.springframework.web.servlet), FrameworkServlet.java
service(HttpServletRequest, HttpServletResponse):635, HttpServlet (javax.servlet.http), HttpServlet.java
service(HttpServletRequest, HttpServletResponse):851, FrameworkServlet (org.springframework.web.servlet), FrameworkServlet.java
service(ServletRequest, ServletResponse):742, HttpServlet (javax.servlet.http), HttpServlet.java
internalDoFilter(ServletRequest, ServletResponse):231, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilter(ServletRequest, ServletResponse):166, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilter(ServletRequest, ServletResponse, FilterChain):52, WsFilter (org.apache.tomcat.websocket.server), WsFilter.java
internalDoFilter(ServletRequest, ServletResponse):193, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilter(ServletRequest, ServletResponse):166, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain):99, RequestContextFilter (org.springframework.web.filter), RequestContextFilter.java
doFilter(ServletRequest, ServletResponse, FilterChain):107, OncePerRequestFilter (org.springframework.web.filter), OncePerRequestFilter.java
internalDoFilter(ServletRequest, ServletResponse):193, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilter(ServletRequest, ServletResponse):166, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain):109, HttpPutFormContentFilter (org.springframework.web.filter), HttpPutFormContentFilter.java
doFilter(ServletRequest, ServletResponse, FilterChain):107, OncePerRequestFilter (org.springframework.web.filter), OncePerRequestFilter.java
internalDoFilter(ServletRequest, ServletResponse):193, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilter(ServletRequest, ServletResponse):166, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain):81, HiddenHttpMethodFilter (org.springframework.web.filter), HiddenHttpMethodFilter.java
doFilter(ServletRequest, ServletResponse, FilterChain):107, OncePerRequestFilter (org.springframework.web.filter), OncePerRequestFilter.java
internalDoFilter(ServletRequest, ServletResponse):193, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilter(ServletRequest, ServletResponse):166, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain):200, CharacterEncodingFilter (org.springframework.web.filter), CharacterEncodingFilter.java
doFilter(ServletRequest, ServletResponse, FilterChain):107, OncePerRequestFilter (org.springframework.web.filter), OncePerRequestFilter.java
internalDoFilter(ServletRequest, ServletResponse):193, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
doFilter(ServletRequest, ServletResponse):166, ApplicationFilterChain (org.apache.catalina.core), ApplicationFilterChain.java
invoke(Request, Response):198, StandardWrapperValve (org.apache.catalina.core), StandardWrapperValve.java
invoke(Request, Response):96, StandardContextValve (org.apache.catalina.core), StandardContextValve.java
invoke(Request, Response):496, AuthenticatorBase (org.apache.catalina.authenticator), AuthenticatorBase.java
invoke(Request, Response):140, StandardHostValve (org.apache.catalina.core), StandardHostValve.java
invoke(Request, Response):81, ErrorReportValve (org.apache.catalina.valves), ErrorReportValve.java
invoke(Request, Response):87, StandardEngineValve (org.apache.catalina.core), StandardEngineValve.java
service(Request, Response):342, CoyoteAdapter (org.apache.catalina.connector), CoyoteAdapter.java
service(SocketWrapperBase):803, Http11Processor (org.apache.coyote.http11), Http11Processor.java
process(SocketWrapperBase, SocketEvent):66, AbstractProcessorLight (org.apache.coyote), AbstractProcessorLight.java
process(SocketWrapperBase, SocketEvent):790, AbstractProtocol$ConnectionHandler (org.apache.coyote), AbstractProtocol.java
doRun():1703, Nio2Endpoint$SocketProcessor (org.apache.tomcat.util.net), Nio2Endpoint.java
run():49, SocketProcessorBase (org.apache.tomcat.util.net), SocketProcessorBase.java
processSocket(SocketWrapperBase, SocketEvent, boolean):1050, AbstractEndpoint (org.apache.tomcat.util.net), AbstractEndpoint.java
completed(Integer, SocketWrapperBase):630, Nio2Endpoint$Nio2SocketWrapper$4 (org.apache.tomcat.util.net), Nio2Endpoint.java
completed(Object, Object):608, Nio2Endpoint$Nio2SocketWrapper$4 (org.apache.tomcat.util.net), Nio2Endpoint.java
invokeUnchecked(CompletionHandler, Object, Object, Throwable):126, Invoker (sun.nio.ch), Invoker.java
run():218, Invoker$2 (sun.nio.ch), Invoker.java
run():112, AsynchronousChannelGroupImpl$1 (sun.nio.ch), AsynchronousChannelGroupImpl.java
runWorker(ThreadPoolExecutor$Worker):1149, ThreadPoolExecutor (java.util.concurrent), ThreadPoolExecutor.java
run():624, ThreadPoolExecutor$Worker (java.util.concurrent), ThreadPoolExecutor.java
run():61, TaskThread$WrappingRunnable (org.apache.tomcat.util.threads), TaskThread.java
run():748, Thread (java.lang), Thread.java

堆栈信息解释:
     
 

service:408, Http11Processor (org.apache.coyote.http11)
process:66, AbstractProcessorLight (org.apache.coyote)

 

 将socket解析中的数据,read出来。processor理解为任务。每一个socket都会被一个

processor处理,2者绑定关系。read方法会被调用2次。一次有数据,会按照http协议去

解析methodname http URI等,最终组织好的request会进入容器环节

;一次没有数据,socket被清理。

     

getAdapter().service(request, response);
从这行代码开始,开始在adpter中处理request请求


CoyoteAdapter (org.apache.catalina.connector)
 

容器的入口

This represents the entry point in a coyote-based 
servlet container.
The adapter provides the link between the ProtocolHandler 
and the connector.


     
invoke:200, StandardWrapperValve (org.apache.catalina.core)
invoke:96, StandardContextValve (org.apache.catalina.core)
invoke:490, AuthenticatorBase (org.apache.catalina.authenticator)
invoke:139, StandardHostValve (org.apache.catalina.core)
invoke:92, ErrorReportValve (org.apache.catalina.valves)
invoke:74, StandardEngineValve (org.apache.catalina.core)

// Ask this Host to process this request
host.getPipeline().getFirst().invoke(request, response);

Ask this Context to process this request.

context.getPipeline().getFirst().invoke(request, response);

Select the Wrapper to be used for this Request
wrapper.getPipeline().getFirst().invoke(request, response);






都是容器。并且这些容器并不是平行的,

从下往上是父子关系

是按照责任链的方式执行的。

每一层可以理解为一个pipe-line.

   从
servlet instance 开始,为当前的请求创建filter chain
 
doFilterInternal:103, RequestContextFilter (org.springframework.web.filter)
doFilter:107, OncePerRequestFilter (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
doFilterInternal:92, FormContentFilter (org.springframework.web.filter)
doFilter:107, OncePerRequestFilter (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
doFilterInternal:93, HiddenHttpMethodFilter (org.springframework.web.filter)
doFilter:107, OncePerRequestFilter (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
doFilterInternal:200, CharacterEncodingFilter (org.springframework.web.filter)
doFilter:107, OncePerRequestFilter (org.springframework.web.filter)
internalDoFilter:193, ApplicationFilterChain (org.apache.catalina.core)
doFilter:166, ApplicationFilterChain (org.apache.catalina.core)
 

这些都是Filter.Filter是servlet规范里面的对象

A FilterChain is an object provided by the servlet container to the developer

giving a view into the invocation chain of a filtered request for a resource.

 

ApplicationFilterChain 是FilterChain 的一种实现。

filter执行完成后,就到了servlet里面的service方法
     


posted @ 2019-06-19 13:59  会飞的企鹅吧  阅读(305)  评论(0编辑  收藏  举报