SpringMVC工作原理,简单源码分析。
在项目中web.xml中会看到如下代码:
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextAttribute</param-name>
<param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
原理(网上摘)
DispatcherServlet 是实现了Servlet,那么,它就得遵循Servlet的规则,如下图。
【原理】
那么,当一次请求过来的是时候,肯定是到了service了。
DispatcherServlet的service()方法实现是在FrameworkServlet中,一步一步找,最后回到:
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
·································································
}
HandlerExecutionChain mappedHandler = getHandler(processedRequest);
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());图片
通过返回的处理适配器调用handle,就可以返回视图。
最后通过喧嚷,再返回前端即可。
说几句话就是:因为DispatcherServlet试下了Servlet,所以一层层找下去,发现业务处理是在doDispatch方法中执行,所以请求过来,到doDispatch后,调用了getHandler------>HandlerMapping,循环获取HandlerExecutionChain,再调用getHandlerAdapter获取处理适配器对象,用对象调用了handle,返回了视图,最后渲染返回用户端。