搭建spring框架的时候,web.xml中的spring相关配置时,只配org.springframework.web.servlet.DispatcherServlet可以吗
不用配置org.springframework.web.context.ContextLoaderListener,将不能使用spring的控制反转(即Ioc),把spring mvc当Struts用,即只映射url和action的关系。
大多数spring和springMVC的整合中,都需要在web.xml里面配置两样东西:
1、对spring配置listener,如下:
<!--加载spring容器,启用Spring的相关配置-->
<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>
2、对springMVC配置servlet,如下:
<!--“/”表示根目录下的servlet请求都将进入springMVC的管理-->
<!--配置springmvc前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</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>
ContextLoaderListener 是在上下文加载的时候调用一些配置进行初始化,比如你配置的<context-param>之类的标签。一般配置spring监听器都是为了配合Ioc容器一起使用的。
有些spring和springMVC整合后,没有listener配置是因为:
1. 如果只有 Spring mvc 的一个 Servlet,listener 可以不用。
2. 但是如果用了Shiro 等,Shiro 用到的 Spring 的配置必须在 listener 里加载。
3. 一般 Dao, Service 的 Spring 配置都会在 listener 里加载,因为可能会在多个 Servlet 里用到,因为父子 Context 的可见性问题,防止重复加载所以在 listener 里加载。
因此listener的使用依赖具体情况。
有的项目没有使用可能是因为项目里没和Ioc容器一起使用。
spring源代码里可以看到,启动web服务器的时候会调用监听器的上下文初始化方法,然后去初始化Ioc容器。