无法打开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>