关于SpringMVC,Web.xml监听器是否必须

来源:互联网 发布:软件与电子信息工程师 编辑:程序博客网 时间:2024/06/01 22:27

我们首先来看两个配置:

<!-- Spring MVC配置 -->
<!-- ====================================== -->
<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>&nbsp; 默认
    </init-param>
    -->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
 
<!-- Spring配置 -->
<!-- ====================================== -->
<listener>
   <listenerclass>
     org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>
 
<!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:config/applicationContext.xml</param-value>
</context-param>

在项目中不配置Spring配置,spring一样可以管理项目的bean当然是在springMVC配置里面扫描或维护了bean的关联

为什么我们又建议配置spring监听器?

我们看配置里面加载spring.xml文件的两个标签,前者是在servlet里面用的  <init-param> 初始化标签,我们在spring的 DispatcherServlet源码中可以看到以下代码:

HttpServletBean类中(此类被DispatcherServlet所继承)

        Enumeration en = config.getInitParameterNames();
            while (en.hasMoreElements()) {
                String property = (String) en.nextElement();
                Object value = config.getInitParameter(property);
                addPropertyValue(new PropertyValue(property, value));
                if (missingProps != null) {
                    missingProps.remove(property);
                }
            }

学过servlet的应该会明白了把就是在servlet初始化时调用,比如你在前者把spring标签故意写错,启动项目不会报错,只有在访问servlet时才会报错。因为此时才加载spring配置文件。但是后者监听器如果故意在配置文件中出现检查式错误,那么启动服务器时就会报错。因为监听器在服务器启动的时候也被启动此时也就开始加载spring配置文件。