web应用中的http请求流程

120 阅读5分钟

web应用中的http请求流程

1、使用传统servlet处理http请求

1.1、servlet请求流程

  1. 发送http请求
  2. 服务器接收http请求
  3. 根据web.xml文件配置的请求路径以及相应servlet信息定位到具体的servlet,在servlet中编写那些具体业务逻辑;

1.2、servlet请求的劣势

  1. 在servlet编写具体业务逻辑会导致程序耦合度较高,比如jdbc连接等等;
  2. 需要在web.xml中大量配置请求路径以及所对应的servlet信息

2、使用MVC架构结合servlet处理http请求

2.1、MVC架构

Model(模型):表示领域信息的对象,包含除了用于UI部分的所有数据和行为。可以简单理解为后端的Service层和Dao层。
View(视图):表示UI中模型的显示。可以简单理解为前端页面,包括html静态页面,jsp动态页面等。
Controller(控制器):接收用户输入,操作模型,并使视图更新。可以简单理解为后端的web交互层。

2.2、使用MVC架构结合servlet处理请求

流程:把servlet当作controller,在servlet中调用Model层的service,在service中调用dao,对于不同的请求,可以使用if else逻辑对应具体的业务逻辑(springMVC已帮助实现)

3、使用springMVC处理http请求

3.1、SpringMVC主流程的三个阶段:

1、处理器映射阶段(HandlerMapping):通过解析url中的路径来找到对应的处理器
2、处理器适配阶段(HandlerAdapter):通过解析请求中的参数来适配处理器,并执行处理器
3、视图解析阶段(ViewResolver):如果处理器返回的是逻辑视图,那么会在这个阶段绘制成可展示的视图

3.2、SpringMVC框架中处理请求的三大核心组件

HandlerMapping、HandlerMethod和HandlerAdapter是SpringMVC框架中处理请求的三大核心组件,它们之间的关系如下:

  1. HandlerMapping: HandlerMapping是用来确定客户端请求的URL与HandlerMethod之间的映射关系。当一个请求到达DispatcherServlet时,DispatcherServlet会调用HandlerMapping来查找该请求对应的HandlerMethod。
  2. HandlerMethod: HandlerMethod是真正处理请求的组件,它封装了一个具体的处理器方法,包括方法对象、方法参数、方法返回值和注解等。当DispatcherServlet找到了正确的HandlerMethod后,它会使用HandlerAdapter来调用HandlerMethod来处理请求。
  3. HandlerAdapter: HandlerAdapter是将HandlerMethod适配成为可执行的处理器的组件,它负责将HttpRequest转换成合适的方法参数,并将方法执行后的返回值进行包装。HandlerAdapter的作用是使得不同的HandlerMethod能够使用同一种处理方式来被SpringMVC框架执行。

前端控制器DispatcherServlet统筹整个流程,它的工作除了流程扭转之外,还有执行各种拦截器以及统一异常管理等。

3.3、springMVC的http请求流程

有个DispatcherServlet,SpringMVC的核心控制器,负责SpringMVC的流程管理,将不同的请求路径定位到不同的controller,

  1. DispatcherServlet 接收到客户端发送的请求。

  2. DispatcherServlet 收到请求调用HandlerMapping 处理器映射器。

  3. HandlerMapping 根据请求URL 找到对应的handler 以及处理器 拦截器,返回给DispatcherServlet

  4. DispatcherServlet 根据handler 调用HanderAdapter 处理器适配器。

  5. HandlerAdapter 根据handler 执行处理器,也就是我们controller层写的业务逻辑,并返回一个ModeAndView

  6. HandlerAdapter 返回ModeAndView 给DispatcherServlet

  7. DispatcherServlet 调用 ViewResolver 视图解析器来 来解析ModeAndView

  8. ViewResolve 解析ModeAndView 并返回真正的view 给DispatcherServlet

  9. DispatcherServlet 将得到的视图进行渲染,填充到request域中

  10. 返回给客户端响应结果。

DispatcherServlet直接返回视图给用户的场景很少,目前更多的是DispatcherServlet返回数据给前端,前端渲染视图页面再给用户。
现在业界前后端分离的场景中,SpringMVC已经名存实亡,更多的是SpringMC,springMC的流程如下;

3.4、springMC的http请求流程

有个DispatcherServlet,SpringMVC的核心控制器,负责SpringMVC的流程管理,将不同的请求路径定位到不同的controller,

  1. DispatcherServlet 接收到客户端发送的请求。

  2. DispatcherServlet 收到请求调用HandlerMapping 处理器映射器。

  3. HandlerMapping 根据请求URL 找到对应的handler 以及处理器 拦截器,返回给DispatcherServlet

  4. DispatcherServlet 根据handler 调用HanderAdapter 处理器适配器。

  5. HandlerAdapter 根据handler 执行处理器,也就是我们controller层写的业务逻辑,并返回一个ModeAndView

  6. HandlerAdapter 返回ModeAndView 给DispatcherServlet

  7. DispatcherServlet 将ModeAndView数据返回给前端,由前端进行渲染(视图解析阶段不详述

  8. DispatcherServlet 调用 ViewResolver 视图解析器来 来解析ModeAndView

  9. ViewResolve 解析ModeAndView 并返回真正的view 给DispatcherServlet

  10. DispatcherServlet 将得到的视图进行渲染,填充到request域中

  11. 返回给客户端响应结果。

    draw.io

什么是处理器?

SpringMVC中的处理器(Handler)是springMVC对控制器(即Controller)的封装,handler会调用对应的controller,controller是我们需要手动开发的业务逻辑。

什么是处理器链?

SpringMVC不仅要执行处理器中包含的方法,它自己也有许多工作,例如执行多种拦截器、异常处理等。所有这些方法都会聚合到一个处理器链当中。
所以处理器链通常包含一个处理器和多个拦截器