回答这个问题之前,先要明确tomcat和spring mvc各自的指责是什么
tomcat:作为一个servlet容器,接受和返回http请求。
spring mvc:分发请求,执行处理器,返回数据,渲染视图。
tomcat和spring mvc的连接点在于servlet:
步骤如下:
1、请求来了以后,endpoint先接受到请求,使用socked套接字,走的是TCP/IP协议。
2、将连接交给线程池Executor处理,开始执行请求响应任务。
3、processor组件读取消息报文,解析请求行,请求体,请求头,封装成request对象(通过Http协议)。
4、Mapper对象根据请求行的url和请求头的host在Web.xml中匹配到哪个Host容器,Context容器,Wrapper容器来处理请求。
5、coyoteAdapter组件把connector和容器的Engine组件联系起来,并将request请求封装成servletRequest请求。调用Engine的pipeline
6、pipeline开始处理请求,然后交给Host的pipeline,这样一直调用(责任链)
7、调用到最后是wrapper的pipeline,然后创建一个ApplicationFilterChain,初始化所有的filter,创建Servlet对象。这个servlet对象就是spring mvc中的DispatcherServlet。这就和spring mvc对接上了
8、调用service方法,里面还有个doDispatcher()方法。接下来就进入了spring MVC的流程了
步骤5之前都是Tomcat中连接器做的事情。HttpServletRequest是进入容器以后创建的。