27

我有这里我使用Spring MVC的春季安全 Eclipse中的Maven Web项目。 当我truy启动它,它不suceed并初始化上下文:我的应用程序无法打开ServletContext的资源

Could not open ServletContext resource [/WEB-INF/spring-dispatcher-servlet.xml]

更多细节如下:


这是我web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0"> 

<display-name>Web Manager</display-name> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
      /WEB-INF/spring/app-config.xml, /WEB-INF/spring/security-config.xml 
    </param-value> 
</context-param> 

<!-- Spring MVC --> 
<servlet> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<!-- Spring Security --> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
</web-app> 

This我的app-config.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:mvc="http://www.springframework.org/schema/mvc" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

<!-- Scans the classpath of this application for @Components to deploy as beans --> 
<context:component-scan base-package="fr.tessa.webmanager" /> 


<!-- Configures the @Controller programming model --> 
<mvc:annotation-driven /> 

<!-- misc --> 
<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<!-- Configure the multipart resolver --> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <!-- one of the properties available; the maximum file size in bytes --> 
    <property name="maxUploadSize" value="1000000" /> 
</bean> 

<!-- Configures Hibernate - Database Config --> 
<import resource="dbconfig/validationdb-config.xml" /> 
<import resource="dbconfig/db-config.xml" /> 


这是我security-config.xml

<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="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.1.xsd 
       http://www.springframework.org/schema/security 
       http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

<http use-expressions="true"> 
    <intercept-url pattern="/welcome*" access="ROLE_USER" /> 
    <form-login login-page="/login" default-target-url="/welcome" 
     authentication-failure-url="/loginfailed" /> 
    <logout logout-success-url="/logout" /> 
</http> 
<authentication-manager> 
    <authentication-provider> 
    <user-service> 
     <user name="mkyong" password="123456" authorities="ROLE_USER" /> 
    </user-service> 
    </authentication-provider> 
</authentication-manager> 
</beans:beans> 

我的问题是,当我启动应用程序,我有错误,如

Infos: Loading XML bean definitions from ServletContext resource [/WEB-INF/spring-dispatcher-servlet.xml] 
févr. 19, 2013 10:50:09 AM org.springframework.web.servlet.FrameworkServlet initServletBean 
Grave: Context initialization failed 
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/spring-dispatcher-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/spring-dispatcher-servlet.xml] 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) 
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) 
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:131) 
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436) 
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 
at org.apache.catalina.startup.Embedded.start(Embedded.java:825) 
at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558) 
at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255) 
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/spring-dispatcher-servlet.xml] 
at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:140) 
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328) 
... 48 more 

它说,它无法找到/WEB-INF/spring-dispatcher-servlet.xml但我我以前不把它放在web.xml,我的配置文件是从Spring reference docapp-config.xml

回答

76

报价:

在DispatcherServlet的初始化过程,Spring MVC的寻找一个文件名为[servlet的名称] -servlet.xml后缀在你的web应用的WEB-INF目录下,并创建定义的bean ...

你的servlet调用spring-dispatcher,所以它看起来/WEB-INF/spring-dispatcher-servlet.xml。你需要有这个servlet配置,并在那里定义web相关的bean(如控制器,视图解析器等)。请参阅链接文档以了解有关servlet上下文与全局应用程序上下文的关系(在您的案例中为app-config.xml)。

还有一件事,如果你不喜欢的servlet配置XML的命名规则,你可以明确地指定您的配置:

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

感谢Zagyi,我删除了 “/WEB-INF/spring/app-config.xml” 从的context-param和我在servlet的初始参数驱赶出局和它的工作,为+1 :-) – user820688 2013-02-19 13:24:19

1

如果您收到此错误使用Java配置,它是通常是因为你忘了在应用程序上下文传递到DispatcherServlet构造:通过添加上下文构造ARG

AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
ctx.register(WebConfig.class); 

ServletRegistration.Dynamic dispatcher = sc.addServlet("dispatcher", 
    new DispatcherServlet()); // <-- no constructor args! 
dispatcher.setLoadOnStartup(1); 
dispatcher.addMapping("/*"); 

修复:

AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
ctx.register(WebConfig.class); 

ServletRegistration.Dynamic dispatcher = sc.addServlet("dispatcher", 
    new DispatcherServlet(ctx)); // <-- hooray! Spring doesn't look for XML files! 
dispatcher.setLoadOnStartup(1); 
dispatcher.addMapping("/*"); 
+0

这您回应正是我的例子 – tsayen 2017-01-09 11:02:58

+0

OMFG,4天,这有助于。谢谢。只是为了记录。 帮助在标准弹簧启动应用程序中使用wildfly 10 openshift部署。 也可以尝试在行家 的javax.servlet 的javax.servlet-API 提供 设置 – 2017-02-22 18:31:19

0

确保你的maven war插件在pom.xml中包含所有文件(特别是xml文件),同时构建战争。但是你不需要包含.java文件。

   <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.5</version>     
       <configuration>  
         <webResources> 
         <resources> 
          <directory>WebContent</directory> 
          <includes> 
           <include>**/*.*</include><!--this line includes the xml files into the war, which will be found when it is exploded in server during deployment --> 
          </includes> 
          <excludes> 
           <exclude>*.java</exclude> 
          <excludes> 
         </resources>       
         </webResources>    
        <webXml>WebContent/WEB-INF/web.xml</webXml>          
       </configuration> 
      </plugin> 
相关问题