无法打开ServletContext资源

好吧,我是第500个用户问这个问题,我读了很多答案,但仍然没有运气。

父模块pom包含:

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.framework.version}</version> </dependency> 

子模块有maven-jetty-plugin ,我用jetty:run运行我的webapp模块jetty:run

web.xml定义了标准的调度程序模块:

 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <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> 

我有WEB-INF下的dispatcher-servlet.xml文件,但是启动失败:

 FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml] 

哪里不对? 文档和大家都说Spring MVC会searchXX-servlet.xml,其中XX是servlet的名字。 为什么要searchapplicationContext.xml

ContextLoaderListener有自己的上下文,它由所有的servlet和filter共享。 默认情况下,它将search/WEB-INF/applicationContext.xml

您可以使用自定义

 <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/somewhere-else/root-context.xml</param-value> </context-param> 

web.xml ,或者如果你不需要的话删除这个监听器。

更新:这将创build与applicationContext.xml中相同的第二个上下文

或者你可以添加这个代码片段到你的web.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>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 

代替

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