Spring-mvc源码分析-DispatcherServlet

参考网址:http://www.cnblogs.com/fangjian0423/p/springMVC-dispatcherServlet.html

                https://www.cnblogs.com/hzj-/articles/1689836.html

                https://blog.csdn.net/jixinhuluwa/article/details/48003203    感谢大佬!!!

前言:祭出springmvc 的架构图,自己又加工了一下。有错误的地方,请指正。


(1)介绍DispatcherServlet

DispatcherServlet是一个实际的Servlet(它从HttpServlet基类继承),需要在web.xml 中配置。

<!-- 前端控制器配置 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!--加载springmvc.xml配置 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- servlet映射 -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

        在tomcat启动后,这里设定了在启动的时候就加载(<load-on-startup>1</load-on-startup>),所以就会直接加载

DispatcherServlet,而设置的init-param 也会被使用到,所以spring-mvc.xml 就会被加载。

(1.1)DispatcherServlet初始化过程

参考网站:http://www.cnblogs.com/fangjian0423/p/springMVC-dispatcherServlet.html

看下继承关系:


说明还是从HttpServlet基类继承,所以先关注init() 初始化方法。

1、httpServletBean 

在httpServletBean 中重写了init方法:具体内容可以参考上面的那个文章,我这里直接演示debug过程。


这里就拿到了 initparam 设定的contextConfigLocation 的初始化参数和参数值。


这里就构造了DispatcherServlet 

下面还有这个方法:initServletBean(); 是在FrameworkServlet 进行重写的。

2、FrameworkServlet 


进入initWebApplicationContext 方法

在这里就加载了在web.xml 中配置的:
<!-- 加载spring容器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/spring-*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

这里就生成了根上下文也可以理解为spring容器上下文,下来就是将dispathcherservlet 和 spring 容器上下文关联。


onRefresh()方法由 DispatcherServlet 实现:

3、DispatcherServlet


很明显,initStrategies方法内部会初始化各个策略接口的实现类。

比如异常处理初始化initHandlerExceptionResolvers方法:SpringMVC异常处理机制详解

视图处理初始化initViewResolvers方法:SpringMVC视图机制详解

请求映射处理初始化initHandlerMappings方法:详解SpringMVC请求的时候是如何找到正确的Controller

总结一下各个Servlet的作用:

1. HttpServletBean

  主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。

2. FrameworkServlet

  将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。

3. DispatcherServlet 

  初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等。

参考:http://www.cnblogs.com/fangjian0423/p/springMVC-dispatcherServlet.html


猜你喜欢

转载自blog.csdn.net/qq_28817739/article/details/80462837