上一篇SpringMvc源码-DispatcherServlet讲了DispatcherServlet的初始化过程,本篇着重讲DispatchServlet处理一个请求的流程,即面试SpringMvc的经典面试题,SpringMvc是如何处理reqeuest的。
准备工作
我们的DispatchServlet继承于HttpServlet,HttpServlet处理请求的方法主要是httpServlet.service,该方法会根据request.method调用doXxx。FrameworkServlet自己去实现了doXxx。
整个的调用链是:接到reqeust请求后->FrameworkServlet.service()->FrameworkServlet.processRequest()->DispatchServlet.doService()(FrameworkServlet提供了抽象方法)
->DispatchServlet.doDispatch()处理请求
下面,我们根据这个调用链进行分析
FrameworkServlet
FrameworkServlet还重写了service方法,主要是支持HttpMethod.PATCH,它们和HttpMethod.PATCH一样都调用了processRequest(request, response)
所有的doXXX都是调用processRequest我们来看下processRequest方法做了什么
processRequest
1 | protected final void processRequest(HttpServletRequest request, HttpServletResponse response) |
doService–>doDispatch方法负责处理具体的请求逻辑
doDispatch见下面
1 | protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { |
关键文章索引: