web-dev-qa-db-fra.com

Impossible d'ouvrir la ressource ServletContext [/WEB-INF/applicationContext.xml]

Ok, je suis le 500ème utilisateur à poser cette question, j'ai lu beaucoup de réponses mais je n'ai toujours pas eu de chance.

le module parent pom contient:

<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>

Le module enfant a maven-jetty-plugin et je lance mon module webapp avec jetty:run.

web.xml définit le module de répartition standard:

<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>

J'ai fichier dispatcher-servlet.xml sous WEB-INF, bien que le démarrage échoue avec:

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

Qu'est-ce qui ne va pas? Documentation et tout le monde dit que Spring MVC recherchera XX-servlet.xml, où XX est le nom du servlet. Pourquoi recherche-t-il applicationContext.xml?

43
Leos Literak

ContextLoaderListener a son propre contexte qui est partagé par tous les servlets et filtres. Par défaut, il recherchera /WEB-INF/applicationContext.xml

Vous pouvez personnaliser cela en utilisant

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

sur web.xml, ou supprimez cet écouteur si vous n'en avez pas besoin.

69
gerrytan

pdate: Ceci créera un deuxième contexte identique à celui de applicationContext.xml

ou vous pouvez ajouter cet extrait de code à votre 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>

au lieu de

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