无法打开ServletContext资源[/WEB-INF/applicationContext.xml]

Leo*_*rak 44 java spring spring-mvc

好的,我是第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>
Run Code Online (Sandbox Code Playgroud)

子模块有maven-jetty-plugin,我运行我的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>
Run Code Online (Sandbox Code Playgroud)

我有文件dispatcher-servlet.xmlWEB-INF,虽然启动失败:

FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
Run Code Online (Sandbox Code Playgroud)

怎么了?文档和每个人都说Spring MVC将搜索XX-servlet.xml,其中XX是servlet的名称.为什么要搜索applicationContext.xml

ger*_*tan 69

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>
Run Code Online (Sandbox Code Playgroud)

web.xml,或者删除此监听器,如果你并不需要一个.


Aal*_*iry 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>
Run Code Online (Sandbox Code Playgroud)

代替

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)