一个请求怎么从Tomcat到Spring的流程

一个请求怎么从Tomcat到Spring的流程_第1张图片
一个请求怎么从Tomcat到Spring的流程_第2张图片
一个请求怎么从Tomcat到Spring的流程_第3张图片

SocketProcessorBase - run

一个请求怎么从Tomcat到Spring的流程_第4张图片

NioEndpoint -doRun

一个请求怎么从Tomcat到Spring的流程_第5张图片

在这里插入图片描述

AbstractProtocol-process

一个请求怎么从Tomcat到Spring的流程_第6张图片
一个请求怎么从Tomcat到Spring的流程_第7张图片

AbstractProcessorLight -process

一个请求怎么从Tomcat到Spring的流程_第8张图片

Http11Processor - servcie

这个方法将Socket转换为Request与Response

 protected final Request request;
    protected final Response response;

一个请求怎么从Tomcat到Spring的流程_第9张图片
一个请求怎么从Tomcat到Spring的流程_第10张图片

CoyoteAdapter-service

一个请求怎么从Tomcat到Spring的流程_第11张图片

一个请求怎么从Tomcat到Spring的流程_第12张图片

获取Service中的容器就是Enginer
标准实现为StandardEngineValve 中的invoke

StandardEngineValve

一个请求怎么从Tomcat到Spring的流程_第13张图片

获取host容器

StandardHostValve

一个请求怎么从Tomcat到Spring的流程_第14张图片
一个请求怎么从Tomcat到Spring的流程_第15张图片

StandardContextValve

一个请求怎么从Tomcat到Spring的流程_第16张图片
一个请求怎么从Tomcat到Spring的流程_第17张图片
调用Wrapper

StandardWrapperValve

一个请求怎么从Tomcat到Spring的流程_第18张图片
一个请求怎么从Tomcat到Spring的流程_第19张图片
转换为ServletRequest 和ServletResponse
一个请求怎么从Tomcat到Spring的流程_第20张图片

Wrapper 容器的最后一个 Valve 会创建一个 Filter链,并调用doFilter方法,最终会调用Servlet中的Service方法 。
Value与Filter区别:
Valve 是 Tomcat 的私有机制,与 Tomcat的基础架构/API紧
紧耦合,Servlet API是公有的标准,所有的Web容器包括Jetty都支持Filter。
Valve 工作在 Web 容器级别,拦截所有应用的请求;而ServletFilter工作在应用级别,只能拦某个Web应用的所有请求,如果想作整个Web容器的拦截器,必须通过Value来实现。

ApplicationFilterChain

一个请求怎么从Tomcat到Spring的流程_第21张图片

一个请求怎么从Tomcat到Spring的流程_第22张图片
一个请求怎么从Tomcat到Spring的流程_第23张图片

这一步完成Request-ServletRequest的转换,Response->ServeltResponse

GenericServlet -service

在这里插入图片描述

HttpServlet

一个请求怎么从Tomcat到Spring的流程_第24张图片

进入Spring -FrameworkServlet

一个请求怎么从Tomcat到Spring的流程_第25张图片

调用doServcie方法
一个请求怎么从Tomcat到Spring的流程_第26张图片

在这里插入图片描述
子类 实现

DispatcherServlet -doService 完成进入Spring的流程

一个请求怎么从Tomcat到Spring的流程_第27张图片

一个请求怎么从Tomcat到Spring的流程_第28张图片
进入Dispatch流程由Spring完全控制
一个请求怎么从Tomcat到Spring的流程_第29张图片

AbstractHandlerMethodAdapter

在这里插入图片描述

RequestMappingHandlerAdapter

一个请求怎么从Tomcat到Spring的流程_第30张图片
一个请求怎么从Tomcat到Spring的流程_第31张图片
一个请求怎么从Tomcat到Spring的流程_第32张图片

ServletInvocableHandlerMethod

一个请求怎么从Tomcat到Spring的流程_第33张图片

InvocableHandlerMethod

一个请求怎么从Tomcat到Spring的流程_第34张图片

一个请求怎么从Tomcat到Spring的流程_第35张图片

return getBridgedMethod().invoke(getBean(), args);

Method -java.lang.reflect.Method

一个请求怎么从Tomcat到Spring的流程_第36张图片
反射的方式执行完成

调用Controller

一个请求怎么从Tomcat到Spring的流程_第37张图片

你可能感兴趣的:(Tomcat,Tomcat与Jetty)