好的,我是第500个用户问这个问题,我读了很多answers,但仍然没有运气。
父模块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模块。
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>
我在dispatcher-servlet.xml
下有WEB-INF
文件,但启动失败时为:
FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
有什么问题?文档和每个人都说Spring MVC将搜索XX-servlet.xml,其中XX是servlet的名称。为什么要搜索applicationContext.xml
?
答案 0 :(得分:68)
ContextLoaderListener
有自己的上下文,由所有servlet和过滤器共享。默认情况下,它会搜索/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
上,或者如果您不需要,请删除此听众。
答案 1 :(得分:24)
更新:这将创建与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>