SocketProcessorBase - run
NioEndpoint -doRun
AbstractProtocol-process
AbstractProcessorLight -process
Http11Processor - servcie
这个方法将Socket转换为Request与Response
protected final Request request;
protected final Response response;
CoyoteAdapter-service
获取Service中的容器就是Enginer
标准实现为StandardEngineValve 中的invoke
StandardEngineValve
获取host容器
StandardHostValve
StandardContextValve
调用Wrapper
StandardWrapperValve
转换为ServletRequest 和ServletResponse
Wrapper 容器的最后一个 Valve 会创建一个 Filter链,并调用doFilter方法,最终会调用Servlet中的Service方法 。
Value与Filter区别:
Valve 是 Tomcat 的私有机制,与 Tomcat的基础架构/API紧
紧耦合,Servlet API是公有的标准,所有的Web容器包括Jetty都支持Filter。
Valve 工作在 Web 容器级别,拦截所有应用的请求;而ServletFilter工作在应用级别,只能拦某个Web应用的所有请求,如果想作整个Web容器的拦截器,必须通过Value来实现。
ApplicationFilterChain
这一步完成Request-ServletRequest的转换,Response->ServeltResponse
GenericServlet -service
HttpServlet
进入Spring -FrameworkServlet
调用doServcie方法
子类 实现
DispatcherServlet -doService 完成进入Spring的流程
进入Dispatch流程由Spring完全控制
AbstractHandlerMethodAdapter
RequestMappingHandlerAdapter
ServletInvocableHandlerMethod
InvocableHandlerMethod
return getBridgedMethod().invoke(getBean(), args);
Method -java.lang.reflect.Method
反射的方式执行完成