【问题标题】:Could not open ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]无法打开 ServletContext 资源 [/WEB-INF/mvc-dispatcher-servlet.xml]
【发布时间】:2016-02-22 13:49:54
【问题描述】:

我在运行代码时遇到此错误。任何帮助将不胜感激。谢谢。

这是我的调度程序 servlet。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="tutorial.mvc"/>

    <mvc:annotation-driven/>

    <bean id="HandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">      
        <property name="prefix" value="/WEB-INF/" />
        <property name="suffix" value=".jsp" />    
    </bean> 
</beans>

这是我的 web.xml

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
  </servlet>

  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app> 

这是我最终得到的错误。

     Nov 20, 2015 1:39:45 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:343)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2462)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2451)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]
    at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329)
    ... 35 more

【问题讨论】:

    标签: java xml spring servlets


    【解决方案1】:

    Spring 无法找到您的调度程序配置。您没有定义contextConfigLocation。在这种情况下,Spring 会尝试从/WEB-INF/&lt;servlet-name&gt;-servlet.xml 加载调度程序配置。在你的情况下/WEB-INF/mvc-dispatcher-servlet.xml

    要么将配置放在/WEB-INF/ 下并将其重命名为mvc-dispatcher-servlet.xml,要么在web.xml 中定义contextConfigLocation

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/points/to/your/configuration.xml</param-value>
        </init-param> 
    </servlet>
    

    【讨论】:

      【解决方案2】:

      您有 2 个解决方案:

      为您的上下文配置文件命名(在我的示例中为 applicationContext.xml),添加:

      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/applicationContext.xml</param-value>
      </context-param>
      

      您还可以使用类路径(资源)中的文件。

      或者使用默认机制:

      如果你的 servler 命名为 mvc-application,spring 会循环查找一个名为 mvc-application-servlet.xml 在你 WEB-INF。规则很简单,spring就是按照模式找文件:{servletName}-servlet.xml

      所以你可以重命名你的文件,或者直接设置它的路径。 最简单的方法是将配置文件重命名为:'mvc-dispatcher-servlet.xml'

      【讨论】:

      • 即使添加了配置文件,它仍然无法正常工作。仍然出现同样的错误。
      • @ksokol 即使添加了配置文件,它仍然无法正常工作。仍然出现同样的错误。
      • 您的文件是否位于 WEB-INF 目录中?你改名字了吗?
      • 它确实有效!路径是问题所在。谢谢!
      • @Programmer254 很高兴我能帮上忙。所以现在我们可以关闭这个问题了:)记得把你的问题标记为已解决:)
      【解决方案3】:

      我也遇到了同样的问题。我认为您需要为 web.xml 文件添加一些新内容。这是我最终正确的 web.xml 文件线。

        <servlet>
            <servlet-name>mvc-dispatcher</servlet-name>
            <servlet-class>
               org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <load-on-startup>1</load-on-startup>
         </servlet>
      
         <servlet-mapping>
           <servlet-name>mvc-dispatcher</servlet-name>
           <!-- <url-pattern>/services/*</url-pattern> -->
           <url-pattern>/</url-pattern>
         </servlet-mapping>
      
          <context-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
         </context-param> 
      
         <listener>
            <listener-class>
               org.springframework.web.context.ContextLoaderListener
            </listener-class>
         </listener>
      

      据此

      servlet-name,servlet-mapping,param-value 相同。

      否则显示错误。这里是 mvc-dispatcher。然后将 servlet.xml 文件创建为 mvc-dispatcher-servlet.xml

      您可以从this doc 获得更多想法。

      【讨论】:

        【解决方案4】:

        当我无法在 Tomcat 9 中启动相当旧的代码时,我遇到了这个问题。版本很重要,因为它们依赖于 Java。对于 tomcat 9 至少 java 8 或更多。 这个线程中描述的内容有 2 个额外的步骤,我必须做一个工作项目:

        -更新弹簧罐,

        -在项目和war文件中获取正确的文件夹结构;

        当前 Spring MVC 版本是 5.3.14 https://mvnrepository.com/artifact/org.springframework/spring-webmvc 我正在处理的项目的 Spring MVC 版本是 3.0.3.RELEASE 我必须做的第一件事是将 Spring 从 3 更新到 4。为此,我从 Ant 切换到 Maven。但是项目不工作,所以我不得不调整项目内的文件夹结构。

        通过研究,我了解到文件夹在 WAR 中的组织方式至关重要,但“Maven”中的默认设置不允许构建必要的结构。

        我用过: ma​​ven 战争插件 3.3.2 在我的项目中实现必要的结构。下面我将分享对我有用的结构:

        - The structure of the project(inside IDE)

        - The structure of the project(inside war file that was produced)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-18
          • 2012-06-05
          • 2023-03-15
          • 2015-02-03
          • 2016-04-04
          • 2014-04-16
          • 2020-06-26
          • 1970-01-01
          相关资源
          最近更新 更多