如何解决 BeanDefinitionStoreException:IOException 从 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml]

Posted

技术标签:

【中文标题】如何解决 BeanDefinitionStoreException:IOException 从 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml] 解析 XML 文档?【英文标题】:How to resolve BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/dispatcher-servlet.xml]? 【发布时间】:2014-11-09 07:40:08 【问题描述】:

错误堆栈跟踪:

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]   

调度程序-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:beans="http://springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans/spring-beans.xsd 
       http://www.springframework.org/schema/context/spring-context.xsd       
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/task/spring-task.xsd">

    <mvc:annotation-driven/>

    <context:component-scan base-package="com.exam.www" />

    <!-- Factory bean that creates the Mongo instance -->
    <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
        <property name="host" value="localhost" />
    </bean>

    <!-- MongoTemplate for connecting and quering the documents in the database -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongo" ref="mongo" />
        <constructor-arg name="databaseName" value="Results" />
    </bean>

    <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />



    <bean id="jspViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp"
          p:suffix=".jsp" /> 

  <!--   <bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"/>

    <bean class=
    "org.springframework.web.servlet.view.tiles2.TilesConfigurer"> -->
 <!--  <property name="definitions">
    <list>
      <value>/WEB-INF/views/views.xml</value>
    </list>
  </property> 
</bean> -->




</beans>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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-3.0.xsd">

    <!-- Root Context: defines shared resources visible to all other web components -->

    <!--
        CSRF protection. Here we only include the CsrfFilter instead of all of Spring Security.
        See http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#csrf for more information on
        Spring Security's CSRF protection
    -->
<!--    <bean id="csrfFilter" class="org.springframework.security.web.csrf.CsrfFilter">
        <constructor-arg>
            <bean class="org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository"/>
        </constructor-arg>
    </bean> -->
    <!--
        Provides automatic CSRF token inclusion when using Spring MVC Form tags or Thymeleaf. See
        http://localhost:8080/#forms and form.jsp for examples
    -->
    <!--  <bean id="requestDataValueProcessor" class="org.springframework.security.web.servlet.support.csrf.CsrfRequestDataValueProcessor"/>

-->
</beans>

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">

  <!-- <display-name>Spring With MongoDB Web Application</display-name> -->

    <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/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

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

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

    <welcome-file-list>
       <welcome-file>/search.jsp</welcome-file>
    </welcome-file-list> 
</web-app>

我尝试了几种在线提供的解决方案,例如 1) 授予对所有文件的读、写权限 - 不起作用 2) 添加 init-param - 不起作用 3) 将 dispatcherservlet 的路径显式指定为 /WebContent/WEB-INF/dispatcher-servlet.xml - 不起作用。

当我在 Apache tomcat 服务器 v7.0 上运行项目时出现此错误

在过去的 4 天里,我一直被这个问题困扰。请帮我。

以下是有效的解决方案。

您的战争没有 dispatcher-servlet.xml。 1) 该项目没有 webapp 文件夹。当您使用 maven 创建项目时,请注意。您可以按照此处提到的步骤进行操作 http://blog.manishchhabra.com/2013/04/spring-data-mongodb-example-with-spring-mvc-3-2/ 您会使用一些奇怪的 maven 原型创建项目。试试上面的链接,它可以工作。

我在互联网的其他地方找不到这个解决方案。 :)

【问题讨论】:

@SotiriosDelimanolis 很抱歉。现在编辑文件。 【参考方案1】:

尝试在 web.xml 中将 &lt;param-value&gt;WEB-INF/dispatcher-servlet.xml&lt;/param-value&gt; 更改为 &lt;param-value&gt;/WEB-INF/dispatcher-servlet.xml&lt;/param-value&gt;

【讨论】:

是的,我也试过这个。没有运气,有趣的是,无论我添加/不添加,堆栈跟踪总是 / 在其中。 尝试在web.xml中添加这个监听器&lt;listener&gt; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt; &lt;/listener&gt; 也试过了。它抛出了 applicationContext.xml 缺少 IOException。然后一些如何修复它。添加它并不能解决这个 dispatcher-servlet.xml 问题。 好的,请写下你的 dispatcher-servlet.xml 的路径。 路径是什么意思?【参考方案2】:

首先dispatcher-servlet.xml是spring mvc的config,不是applicatoin的。所以你应该删除 web.xml 中的 标签。

然后spring mvc会根据servlet-name dispatcher获取xml文件。所以你也可以删除web.xml 中的标签

试试看spring mvc能不能找到xml auto

【讨论】:

【参考方案3】:

Spring 为 Web 应用程序创建了两个应用程序上下文。第一个是包含应用程序 bean 的根应用程序上下文,例如 DAO 服务对象等。此上下文(在您的情况下为 applicationContext.xml)是使用上下文参数 contextConfigLocation 配置的。第二个是包含您的 Web 特定 bean 的子 Web 应用程序上下文。这是使用调度程序 servlet 的 init-param contextConfiguration 配置的。

在您的情况下,您已经为两者复制了配置文件。按如下方式更改您的 web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">

  <!-- <display-name>Spring With MongoDB Web Application</display-name> -->

    <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/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

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

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

    <welcome-file-list>
       <welcome-file>/search.jsp</welcome-file>
    </welcome-file-list> 
</web-app>

【讨论】:

这对我有用!几个小时后..终于!但这会在浏览器中将 localhost:8080/MyTestWebApp/WEB-INF/web.xml 作为 url 启动。我的意思是,它不应该启动 中提到的 jsp 页面吗?【参考方案4】:

如下替换你的 mvc-config 文件 uri:

<context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>WEB-INF/classes/dispatcher-servlet.xml</param-value>
</context-param>

【讨论】:

【参考方案5】:

确保在 beans 标记处声明的所有 xsd 在该位置可用。

【讨论】:

以上是关于如何解决 BeanDefinitionStoreException:IOException 从 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml] 的主要内容,如果未能解决你的问题,请参考以下文章

如何解决包冲突问题

如何解决包冲突问题

如何解决ajax跨域问题

MySQL 的 10048问题,如何解决?

如何解决smartgit的冲突问题

如何解决https传输图片的问题