Подтвердить что ты не робот

Не удалось открыть ресурс ServletContext [/WEB-INF/applicationContext.xml]

Хорошо, я 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, и я запустил мой модуль 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>

У меня есть файл dispatcher-servlet.xml под WEB-INF, но сбой запуска начинается с:

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

Что не так? Документация и все говорят, что Spring MVC будет искать XX-servlet.xml, где XX - это имя сервлета. Почему он ищет applicationContext.xml?

4b9b3361

Ответ 1

ContextLoaderListener имеет свой собственный контекст, который разделяют все сервлеты и фильтры. По умолчанию он будет искать /WEB-INF/applicationContext.xml

Вы можете настроить это, используя

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

on web.xml, или удалите этот прослушиватель, если он вам не нужен.

Ответ 2

Обновление:. Это создаст второй контекст, такой же, как в 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>