IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Différence entre applicationContext.xml et dispatcher-servlet.xml


Sujet :

Spring Java

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 134
    Par défaut Différence entre applicationContext.xml et dispatcher-servlet.xml
    Bonjours à tous,

    Suivant un tutoriel je réalise un projet web basique, j'aimerais savoir quel est la différence entre c'est deux fichier de configuration ?

    applicationContext.xml et dispatcher-servlet.xml

    Ce sont des fichiers de configuration ok, mais dans quel fichier je dois définir mes beans ?

    Si dans l'un je déclare mes beans, l'autre mets de quel utilité ?

    Merci à tous

  2. #2
    Membre éclairé

    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Par défaut
    ApplicationContext.xml va plutôt te servir a configurer les beans métier de ton application, alors que dispatcher-servlet.xml va gérer les beans web (c'est a dire ceux qui vont assurer le traitement de la requètes)

    Tu injectes les beans métiers dans les beans web, mais pas l'inverse !!

  3. #3
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Dans un contexte Web avec Spring MVC, il faut comprendre qu'il y a en générale 2 contexte différents.

    Le premier est créée par le ContextLoaderListener, et pas défaut il va chercher un applicationContext.xml.
    Ce contexte est général à l'application et est chargé lors du démarrage de celle-ci.


    Ensuite, tu as un contexte propre à la servlet, créé par la DispatcherServlet.
    Si dans ton mapping celle-ci porte le nom maservlet, alors elle cherchera un fichier maservlet-servlet.xml

    Dans de fichier, tu as en général les controlleurs, la configuration du view-resolver, etc ... tout ce qui est propre au Web.
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 143
    Par défaut
    En fait les deux fichiers créent un application context.

    Par contre la subtilité est que le dispatcher-servlet.xml créé un application context enfant du premier. Il "voit" les beans de l'application context parent, mais l'inverse n'est pas vrai.

    Ce que dit "michaelcourcy" est donc en fait une obligation, ce qui est une très bonne chose (sinon vous avez une belle bêtise dans votre code).

    Donc :
    - dispatcher-servlet.xml = contexte enfant, contient les beans Web
    - applicationContext.xml = contexte parent, contient les beans métier

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 134
    Par défaut
    Je reviens un peu à l'assaut...
    J'ai crue comprendre mais malheureusement il y a toujours des coins obscures.

    Donc :
    - dispatcher-servlet.xml = contexte enfant, contient les beans Web
    - applicationContext.xml = contexte parent, contient les beans métier
    Que voulez vous dire par beans web ?
    Concernant les métiers je pense qu'il devrait pas y avoir de problème !

    Auriez vous un exemple ?

    Merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 143
    Par défaut
    Des beans Spring MVC. Donc tous les beans annotés @Controller par exemple.

    Note que tu aurais exactement le même système avec Spring WS (cela fait un deuxième application context enfant, qui est le "frère" de celui-ci).

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 134
    Par défaut
    Merci à tous

    Je dois injectes des beans mais dans quel fichier ...?

    Voici mes classes:

    1. IParticipantDao.java
    2. ParticipantDao.java
    3. ImplParticipantDao.java
    4. Participant.java


    1-Dans l'interface se trouve deux signature de méthode addParticipant(Participant participant) && getParticipant(String login)

    2-Dans PartcipantDao on retrouve les méthodes complètent

    3- ImplParticipant à deux instances ParticipantDao et Participant

    J'aimerais que Spring injecte les classes nécessaire dans ces deux instance

    4- Participant est un class définissant mon object Participant, nom, login ....

    Voici mes deux fichiers de configurations:

    applicationContext.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <!-- Les classe metiers -->
        <bean name="helloService" class="metier.HelloService" />
        <bean id="participant" class="controller.Participant"/>
     
        <!-- Les class DAO -->
        <bean id="participantDao" class="dao.ParticipantDao"/>
    dispatcher-servlet.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <bean name="indexController"
              class="org.springframework.web.servlet.mvc.ParameterizableViewController"
              p:viewName="index" />
     
        <bean class="controller.HelloController" p:helloService-ref="helloService"/>
    <bean id="implParticipantDao" class="dao.ImplParticipantDao">
            <property name="participant" ref="participant"/>
            <property name="participantDao" ref="participantDao"/>
     
        </bean>
    Malheureusement j'ai un NullPointerExcpetion, je suppose que l'injection n'est pas faire ...

    Suis je de le bon ?

    Merci

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 143
    Par défaut
    - Ta classe "Participant" représente un objet de domaine, c'est étrange de la configurer avec Spring. Déjà en termes d'architecture, c'est assez discutable, mais avec ce que tu fais là ce sera un singleton : tout le monde va se partager ta classe, ce qui risque de te faire un beau bug. Bref, soit il faut que tu revois ton architecture (ce que je te conseillerais), soit tu la mets en scope request.
    - Ton NullPointerException est sans doute dans la classe HelloController : tu utilises le namespace p pour injecter un HelloService. Et tu n'injectes pas du tout ton implParticipantDao. Si tu ne l'injectes pas, tu vas sans doute avoir un NullPointerException à l'exécution quand tu vas l'utiliser...
    - Le namespace p embrouille pas mal de monde (après c'est une question de goût), mais si tu l'utilises tu ne devrais pas le mélanger avec de l'injection "normale", parce que là ça devient dur à lire. D'où ton NullPointerException. Sinon, as-tu regardé la conf par annotations? Ca t'enlèvera aussi ce type d'erreur.
    - Concernant la question soulevée en début de thread : ton implParticipantDao semble être une classe métier, en tout cas elle est soit un DAO soit une classe métier, mais il est certain que ce n'est pas un bean Web. Tu devrais donc la mettre dans le application-context.xml, et pas dans ton dispatcher-servlet.xml.
    - Tu devrais utiliser des interfaces partout, pour la qualité de ton code (tests unitaires) mais également pour pouvoir utiliser des Proxy JDK, parce que là tu vas partir avec CGLIB.

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 134
    Par défaut
    Avant toute chose merci

    Je tiens à dire que je suis débutant en Spring, c'est ma première application, il m'arrive donc de faire de grosse bêtise.



    - Ta classe "Participant" représente un objet de domaine
    Que dois je faire avec ma classe Participant ?


    Déjà en termes d'architecture, c'est assez discutable,
    Je chercher à apprendre, sachant quel classe j'utilise vous auriez une architecture à conseil ?!
    Que pensez vous de ceci:



    tu utilises le namespace p pour injecter un HelloService.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean class="controller.HelloController" p:implParticipantDao-ref="implParticipantDao" />
    ?
    J'ai suivi le tutoriel de NetBeans et effectivement j'ai pas bien compris l'importance des namespace.
    Pour remédié au namespace que me conseiller vous ?


    Sinon, as-tu regardé la conf par annotations?
    Ne connaissant pas le sujet, je suis actuellement occupé à lire des informations sur le sujet


    Je peu écrire mes controller dans le fichier dispatcher-servlet.xml ?
    Participant, ParticipantDao, IParticipantDao et ImplParticipantDao doivent allez dans le applicationContext.xml ?

    Cette injection est elle correcte (applicationContext.xml):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!-- Les classe metiers -->
        <bean id="participant" class="controller.Participant"/>
     
        <!-- Les class DAO -->
        <bean id="participantDao" class="dao.ParticipantDao"/>
        <bean id="implParticipantDao" class="dao.ImplParticipantDao">
            <property name="participant" ref="participant"/>
            <property name="participantDao" ref="participantDao"/>
        </bean>
     
        <bean class="controller.HelloController">
            <property name="implParticipantDao" ref="implParticipantDao"/>
        </bean>

    D'avance un grand merci à tous

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/10/2013, 15h26
  2. Outils sur les différences entre deux fichiers XML
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 19
    Dernier message: 21/07/2008, 15h21
  3. [VB.NET] Différences entre deux XML
    Par olbi dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/10/2007, 18h04
  4. [XML] Différence entre contenu de balise et argument
    Par cyrano_de_bergerac dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 07/06/2007, 15h49
  5. Réponses: 2
    Dernier message: 06/07/2006, 08h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo