DispatcherServlet

SpringMVC的核心是DispatcherServlet,所有的请求都由这个Servlet进行转发。

DispatcherServlet流程分析

SpringMVC流程图-DispatcherServlet
DispatcherServlet类继承FrameworkServlet类

FrameworkServlet的doGetdoPost等方法都调用processRequest(request, response);方法,

processRequest(request, response);再将请求转发给doService(HttpServletRequest request, HttpServletResponse response)方法,这是一个抽象方法,在DispatcherServlet类中进行实现。

doService(request, response)方法会调用doDispatch(request, response);方法进行请求的分发

分发请求

doDispatch(request, response);方法中通过

1
mappedHandler = getHandler(processedRequest, false);

代码来确定将请求的URI转发给哪个Controller,

1
2
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

在实际调用Controller的过程中,从Spring Context中获取Controller对应的bean,然后使用反射机制调用实际的方法,并将方法返回封装成ModelAndView对象

之后调用render(mv, processedRequest, response)方法对视图进行渲染

最后返回给用户