DispatcherServlet是SpringMVC的核心控制器,也就是前端控制器。
作用: DispatcherServlet作为SpringMVC的前端控制器,负责接收用户的请求,并根据用户的请求返回相应的视图给用户。
1.DispatcherServlet是配置在web.xml中的
<servlet>
<servlet-name>SpringServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<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-mapping>
<servlet-name>SpringServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
load-on-startup:表示启动容器时初始化该Servlet。
如上配置spring web mvc将加载spring-mvc.xml 的配置来初始化上下文。DispatcherServlet初始化的上下文加载的bean只是对Spring Web MVC有效的bean,并不是所有的都有效。(如:Controller ,HandlerMapping,与web相关的组织)
2.上下文关系
Spring集成Web环境的通用配置,在web.xml中置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
ContextLoaderListener初始化的上下文,加载的Bean是对于整个应用程序共享的。一般用于加载除web层的bean,以便与其他任何web框架集成。
3. contextLoaderListener初始化的上下文和dispatcherServlet初始化的上下文关系:
从图中可知:
1.contextLoaderListener初始化的上下文加载的bean是对于整个应用程序共享的,不管是使用什么表现层技术。常用的如DAO层,Service层;
2.dispatcherServlet初始化的上下文加载的bean是只对spring Web MVC有效的bean,如Controller、handlerMapping、HandlerAdapter等等,该初始化上下文应该只加载web相关组件。
4.因此在配置扫描组件是一定要放在contextLoaderListener 初始化的上下文中,这样才能避免非WEB的bean不能扫描的问题。