[Spring] Servlet与DispatcherServl
2020-03-21 本文已影响0人
925781609
1. Servlet
Servlet只是一个简单的Java接口,用于定义一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,都需要回答这三个问题:
- 初始化时要做什么?
- 销毁时要做什么?
- 接受到请求时要做什么?
2. Tomcat
有了Servlet并不能直接处理请求,因为Servlet并不会直接和客户端打交道,更不会直接在Servlet中监听8080端口。那么请求是怎么到Servlet的呢?答案是Tomcat,Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器。Tomcat才是直接与Tomcat打交道的家伙,Servlet是部署在Tomcat中的。
- 他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理;
- 然后调用那个servlet的service方法,service方法返回一个response对象;
- tomcat再把这个response返回给客户端。
关于Tomcat,更多的可以参考:
3. DispatcherServlet
DispatchServlet是Spring MVC中的一个类,实现了Servlet接口。所以部署在Tomcat中的Spring项目,对Tomcat来说,都是一个servlet。
DispatcherServlet的继承关系如下:
DispatcherServlet继承关系(省略部分不相关类)
DispatcherServlet处理网络请求过程如下:
DispatcherServlet处理请求流程
具体流程:
- 用户发请求 --> DispatcherServlet,DispatcherServlet收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制。
- DispatcherServlet --> HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器,多个HandlerInterceptor拦截器)。
- DispatcherServlet -> HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器。
- HandlerAdapter --> 处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理,并返回一个ModelAndView对象(包含模型数据,逻辑视图名)
- ModelAndView的逻辑视图名 --> ViewResolver,ViewResolver将把逻辑视图名解析为具体的View。
- View-->渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构
- 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户。