【问题标题】:Changing location of dispatcher-servlet.xml not working更改 dispatcher-servlet.xml 的位置不起作用
【发布时间】:2016-08-25 22:47:23
【问题描述】:

已经在 web.xml 中将调度程序 servlet 的位置定义为 context-param 中的 [/WEB-INF/config/dispatcher-servlet.xml],这仍然是它寻找 [/WEB-INF/dispatcher- 的原因servlet.xml]。

当将 dipatcher-servlet 放在 [/WEB-INF/config/dispatcher-servlet.xml] 以及 [/WEB-INF/dispatcher-servlet.xml] 时,这将起作用,然后只有它起作用。

它是如何以这种方式表现的?如果将其当前位置更改为 [/WEB-INF/config/dispatcher-servlet.xml] 为什么还要在此 [/WEB-INF/dispatcher-servlet.xml] 位置进行搜索?

web.xml

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>  

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/config/dispatcher-servlet.xml,
            /WEB-INF/config/spring-security.xml,
            /WEB-INF/config/database-config.xml
        </param-value>
    </context-param>

错误:

May 01, 2016 3:55:49 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'dispatcher'
2016-05-01 03:55:49 INFO  DispatcherServlet:488 - FrameworkServlet 'dispatcher': initialization started
2016-05-01 03:55:49 INFO  XmlWebApplicationContext:578 - Refreshing WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sun May 01 03:55:49 IST 2016]; parent: Root WebApplicationContext
2016-05-01 03:55:49 INFO  XmlBeanDefinitionReader:317 - Loading XML bean definitions from ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
May 01, 2016 3:55:49 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/dispatcher-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    您已经像这样定义了 Dispatcher servlet:

    <servlet>
       <servlet-name>dispatcher</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>
    

    因此,默认情况下,它将在您的类路径中查找调度程序 servlet 文件 (dispatcher-servlet.xml)(您的 servlet 名称附加“-servlet.xml”)。

    您已经定义了 dispatcher-servlet.xml,但您将它保存在位置 /WEB-INF/config/ 下。因此,为您的调度程序 servlet xml 文件提供此位置。以下配置应该适合您。

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/conf/dispatcher-servlet.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    

    【讨论】:

      【解决方案2】:

      案例 1:如果你没有定义 init-param 或 context-param 并且 servlet 名称是 dispatcher

      <servlet>
          <servlet-name>dispatcher</servlet-name>
          <servlet-class>
              org.springframework.web.servlet.DispatcherServlet
          </servlet-class>        
          <load-on-startup>1</load-on-startup>
      </servlet>
      

      =>web.xml加载时默认加载/WEB-INF/dispatcher-servlet.xml,不需要在init-param中定义

      案例2:当你想改变dispatcher-servlet.xml的位置时 =>你需要在init-param中提到它的路径。因为init-param会加载这个xml

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 2014-04-11
        • 2014-04-27
        • 2017-10-17
        • 2019-10-12
        相关资源
        最近更新 更多