2012-12-11 5 views
0

Je développe une application Web simple à l'aide de Spring framework 3.1.3.RELEASE & MAVEN. Ma demande ne serait pas mise en service à moins que je sors de l'auditeur web.xmlErreur lors du démarrage de Spring ContextLoaderListener

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

Tomcat signale l'erreur suivante:

INFO: Deploying web application archive sampleapp.war 
11/12/2012 3:45:03 PM org.apache.catalina.core.StandardContext start 
SEVERE: Error listenerStart 
11/12/2012 3:45:03 PM org.apache.catalina.core.StandardContext start 
SEVERE: Context [/sampleapp] startup failed due to previous errors 

Mon WEB.XML se présente comme suit:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
    <display-name>EMS</display-name> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/*-context.xml</param-value> 
    </context-param> 

    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
</web-app> 

Le fichier de contexte d'application est vide à ce stade:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 





</beans> 

est Ci-dessous les fichiers JAR sous WEB-INF/lib

eclipselink-2.4.0.jar    
javax.persistence-2.0.0.jar  
mysql-connector-java-5.1.21.jar 
spring-context-3.1.3.RELEASE.jar 
spring-core-3.1.3.RELEASE.jar 
spring-web-3.1.3.RELEASE.jar 
spring-webmvc-3.1.3.RELEASE.jar 

Ci-dessous les fichiers sous WEB-INF

application.properties 
spring-context.xml 
web.xml 

Je comprends que:

  • ContextLoaderListener est disponible au printemps Si le JAR est disponible dans WEB-INF/lib, il doit être sélectionné par TOMCAT.

Qu'est-ce que je fais mal?

+0

Pouvez-vous envoyer votre fichier de définition Bean Spring et votre trace complète de la pile? – ElderMael

+0

Merci Mael, J'ai mis à jour la question pour inclure le fichier de contexte de l'application.Il est vide car je veux juste faire fonctionner l'application avant d'utiliser DI – Maro

Répondre

0

Le problème était les dépendances de printemps manquantes dans mon fichier POM. J'avais d'abord les dépendances suivantes dans le POM

 <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

J'ai activé le débogage sur tomcat logging.properties de voir que je recevais un ava.lang.NoClassDefFoundError de classe comme je l'ai ajouté les dépendances (un à la fois) ava.lang.NoClassDefFoundError a continué à changer jusqu'à ce que toutes les dépendances soient satisfaites. Le ContextLoaderListener a démarré OK après cela. Les dépendances j'ajouter sont:

 <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-asm</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-expression</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <!-- required by Spring --> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
     </dependency> 

Je

4

Voici votre problème: Déplacez le spring-context.xml dans WEB-INF/classes et définir le contexte param comme suit:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:spring-context.xml</param-value> 
</context-param> 

WEB-INF est pas dans le CLASSPATH.

+0

J'essaie juste d'utiliser l'injection de dépendances à ce stade. Comme je pourrais finir en utilisant un cadre MVC différent pour l'application. Dois-je toujours utiliser la servlet Dispatcher si je veux seulement utiliser Spring pour DI? – Maro

+0

Non, DispatcherServlet est uniquement pour Spring MVC – ElderMael

+0

Vous devez indiquer au programme d'écoute du chargeur de contexte où rechercher XML, quelle que soit la servlet que vous utilisez. Vous n'avez pas dit "no Spring MVC", donc c'est une hypothèse raisonnable que vous l'utilisez. Vous devez avoir au moins une servlet. – duffymo

1

Je partage le raisonnement de duffmo, je veux juste signaler, que vous pouvez laisser le contexte d'application dans le répertoire WEB-INF, si vous mettez à jour votre config:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>WEB-INF/spring-context.xml</param-value> 
</context-param> 

De cette façon, votre contexte global de l'application réside dans le même répertoire que les configurations du répartiteur.

+0

Merci Stefan, j'ai changé la contextConfigLocation. J'ai mis à jour la question pour refléter cela. Mais cela n'a pas résolu le problème – Maro

Questions connexes