美文网首页
2、DispatcherServlet处理请求过程

2、DispatcherServlet处理请求过程

作者: 那谁319 | 来源:发表于2019-06-02 14:28 被阅读0次

上下文

  • servlet对请求的处理一般都是交给service(HttpServletRequest request, HttpServletResponse response)方法。因此定位到DispatcherServlet的service(HttpServletRequest request, HttpServletResponse response)方法(在其父类FrameworkServlet中定义,被继承了)。

FrameworkServlet.service执行逻辑

FrameworkServlet.service.png
  • 从源码中可以看到FrameworkServlet.service单独增加了对PATCH请求的处理逻辑,其他类型的请求依旧调用父类HttpServlet的service方法。

HttpServlet.service执行逻辑

HttpServlet.service.png
  • 可以看到HttpServlet.service内部对不同的请求类型会分开处理,对应不支持的请求类型直接返回HTTP状态为501

FrameworkServlet.doGet执行逻辑

FrameworkServlet.doGet.png
  • 从源码中可以看到get、post、put、delete等请求都是交给processRequest(request, response)方法执行。

FrameworkServlet.processRequest执行逻辑

FrameworkServlet.processRequest.png
  • 这个方法前面和后面通过ThreadLoal线程隔离,做的工作是保留现场,请求处理结束后恢复现场。真正处理请求的方法是doService。这个方法在DispatcherServlet中被重写。

DispatcherServlet.doService执行逻辑

DispatcherServlet.doService.png
  • 各种属性的添加,处理请求的事情交给doDispatch去完成。

DispatcherServlet.doDispatch执行逻辑

DispatcherServlet.doDispatch.png
  • 简单梳理doDispatch的执行流程
    • 获取Handler
    • 获取Adapter
    • 执行applyPreHandle
    • 执行handle方法
    • 执行applyPostHandle
    • 处理返回结果
  • 至此,处理请求结束。可以看出spring mvc 执行链非常清晰,具体的请求处理细节交给对应的模块处理。

相关文章

网友评论

      本文标题:2、DispatcherServlet处理请求过程

      本文链接:https://www.haomeiwen.com/subject/fkintctx.html