SpringMVC执行过程(debug),为截图全部的debug源码,只对关键的执行步骤进行粘贴,doDispatch的整个过程中肯定不止我展示出来的这些步骤
对开发有帮助的应该是对拦截器的执行以及ResponseBodyAdvice(自定义响应结果)的合理使用
一、DispatcherServlet.doDispatch()
springMVC完成接口的响应代码基本是在该方法中完成
下方为该方法的官方说明
Process the actual dispatching to the handler. The handler will be
obtained by applying the servlet’s HandlerMappings in order. The
HandlerAdapter will be obtained by querying the servlet’s installed
HandlerAdapters to find the first that supports the handler class. All
HTTP methods are handled by this method. It’s up to HandlerAdapters or
handlers themselves to decide which methods are acceptable.
二、源码debug,直接将断点打到DispatcherServlet.doDispatch()
1.获取handlerMapping
mappedHandler = getHandler(processedRequest);
2.获取handlerAdapter
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
3.执行拦截器前置处理器
if (!mappedHandler.applyPreHandle(processedRequest, response)) {
return;
}
4.调用接口并响应数据,返回视图ModelAndView(该方法中的执行步骤很多,可以跟进去)
// Actually invoke the handler.
mv = ha.handle(processedRequest, response