java难点spring

[Spring] Servlet与DispatcherServl

2020-03-21  本文已影响0人  925781609

1. Servlet

Servlet只是一个简单的Java接口,用于定义一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,都需要回答这三个问题:

  1. 初始化时要做什么?
  2. 销毁时要做什么?
  3. 接受到请求时要做什么?

2. Tomcat

有了Servlet并不能直接处理请求,因为Servlet并不会直接和客户端打交道,更不会直接在Servlet中监听8080端口。那么请求是怎么到Servlet的呢?答案是Tomcat,Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器。Tomcat才是直接与Tomcat打交道的家伙,Servlet是部署在Tomcat中的。

  1. 他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理;
  2. 然后调用那个servlet的service方法,service方法返回一个response对象;
  3. tomcat再把这个response返回给客户端。

关于Tomcat,更多的可以参考:

  1. Tomcat架构中各个组件及组件间关系
  2. 四张图带你了解Tomcat系统架构--让面试官颤抖的Tomcat回答系列!
  3. Tomcat 系统架构与设计模式

3. DispatcherServlet

DispatchServlet是Spring MVC中的一个类,实现了Servlet接口。所以部署在Tomcat中的Spring项目,对Tomcat来说,都是一个servlet。
DispatcherServlet的继承关系如下:


DispatcherServlet继承关系(省略部分不相关类)

DispatcherServlet处理网络请求过程如下:


DispatcherServlet处理请求流程

具体流程:

  1. 用户发请求 --> DispatcherServlet,DispatcherServlet收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制。
  2. DispatcherServlet --> HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器,多个HandlerInterceptor拦截器)。
  3. DispatcherServlet -> HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器。
  4. HandlerAdapter --> 处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理,并返回一个ModelAndView对象(包含模型数据,逻辑视图名)
  5. ModelAndView的逻辑视图名 --> ViewResolver,ViewResolver将把逻辑视图名解析为具体的View。
  6. View-->渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构
  7. 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户。

参考:

  1. servlet的本质是什么,它是如何工作的? - 柳树的回答 - 知乎
  2. DispatcherServlet的处理流程
上一篇下一篇

猜你喜欢

热点阅读