2010-11-16 2 views
3

Je lis un livre sur Spring et Spring MVC, et j'essaie l'exemple d'application. Le problème est que c'est une version préliminaire du livre, et le code complet n'est pas encore disponible pour le téléchargement.Confus à propos de l'utilisation de ContextLoaderListener dans Spring MVC

Je veux que les beans de ma couche de service soient accessibles via l'application Web. Dois-je les déclarer dans deux fichiers XML? (? Un pour la couche de service, et une pour l'application Web) Ce code est donné dans le livre à ajouter au fichier web.xml, mais je ne suis pas sûr que cela résout:

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

<context-param> 
    <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/spitter-security.xml 
      classpath:service-context.xml 
      classpath:persistence-context.xml 
      classpath:dataSource-context.xml 
     </param-value> 
</context-param> 

Mais il ne Dites où sont situés les fichiers service-context.xml etc. ou quelle est la structure du dossier. Comment sont-ils sur le classpath accessible par "classpath:"? Puis-je avoir ce fichier xml dans un emplacement accessible à la fois par l'application principale et par l'application Web? Ou dois-je déclarer mes beans deux fois pour le déploiement sur Tomcat?

Toute aide serait appréciée car je suis vraiment confus à ce sujet. Merci

+0

Quel type d'application est "l'application principale" - interface graphique, bureau, etc? –

Répondre

2

Les fichiers XML spécifiés ci-dessus se trouvent à la racine du chemin de classe. c'est-à-dire WEB-INF/classes. pour plus de détails

0

Dans le <param-value> le mot-clé classpath vous indique où sont les fichiers XML, ils sont dans le chemin de classe de l'application. Les fichiers xml sont copiés là par tout ce que vous utilisez pour construire avec (vous pouvez les placer sous src/main/resources dans un projet maven ou les copier depuis votre répertoire source dans WEB-INF/classes avec ant).

Je ne sais pas ce qu'est «l'application principale». Si ce que vous voulez dire est que vous avez un fichier jar distinct pour vos fichiers de service, vous pouvez mettre le contexte XML de l'application pour ceux dans le fichier jar, ils seront toujours dans votre classpath.

+0

Je les ai copiés dans des classes WEB-INF/dans mon script de génération ant, mais je reçois toujours FileNotFoundException: la ressource de chemin de classe [service-context.xml] ne peut pas être ouverte car elle n'existe pas ... pourquoi n'est-elle pas trouver le fichier? – Mike

2

Racine contexte d'application (créée par ContextLoaderListener) est une déclarées dans le contexte racine parent d'un contexte d'application Web (créé par DispatcherServlet), donc tous les haricots sont accessibles dans le contexte webapp, de sorte que vous n'avez pas besoin dupliquer leurs déclarations.

Les ressources préfixées par classpath: sont situées dans le chemin de classe, comme l'explique Bozho.

+0

Je dois donc encore déclarer le DispatcherServlet dans le fichier web.xml en plus de l'extrait ci-dessus. Droite? – lanoxx

Questions connexes