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

Servlets/JSP Java Discussion :

utiliser une seule servlet pour toutes les jsp


Sujet :

Servlets/JSP Java

  1. #1
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut utiliser une seule servlet pour toutes les jsp
    Bonjour,

    Je souhaiterais utiliser une seule servlet pour gérer l'affichage de toutes mes jsp. Le problème ce que je n'y arrive pas ^^

    Dans mon web.xml, j'ai mis ca pour intercepter toutes les url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	<servlet-mapping>
    		<servlet-name>home</servlet-name>
    		<url-pattern>/*</url-pattern>
    	</servlet-mapping>
    Et c'est dans ma servlet que ca bloque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	public void doGet(HttpServletRequest request, HttpServletResponse response) 
    			throws ServletException, IOException{
     
    		String url = null;
    		String action = request.getPathInfo().toLowerCase();
    		String methode = request.getMethod().toLowerCase();
     
    		System.out.println(">>>>>"+action);
     
    		if (action.equals("/inscription") && methode.equals("get"))
    			url = "urlInscription";
    		else if (action.equals("/main") && methode.equals("get"))
    			url = "urlHome";
     
                    //le forward va chercher dans une map l'adresse page correspondant à la chaine  
                 getServletContext().getRequestDispatcher((String)params.get(url)).forward(request, response);
    	}
    L'erreur vient du fait que quand je demande /main par exemple, j'obtient ca comme trace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>>>>/main 
    >>>>>/WEB-INF/vues/main.jsp
    Comme je débute juste, le fonctionnement et meme si la trace me parrait pas anormale, j'ai du mal a trouver comment résoudre mon problème ^^

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Il te faut structurer ton appli en séparant ton code de tes jsp
    Ta servlet de base sert uniquement aux actions d'aiguillage vers des classes de traitement qui retourneront les données en variables de session sous forme de tableau par exemple.
    Ta servlet de base est associé à une jsp qui ne contient que l'entête et le pied de page. Dans le body tu appelles tes sous jsp liées aux variables de session.

    Donc pour l'affichage tu appelles ta jsp qui appelle les sous jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    servlet:
    getServletContext().getRequestDispatcher(urlMain).forward(request,response);
     
    jsp de base
    <%
    //on récupère les valeurs dans la session
    String lien1 = (String)session.getAttribute("lien1");
    if(lien1 == null) lien1 = "";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html> ....
     
    <jsp:include page="<%=lien1 %>"/>
    ...
    </html>
    nom des sous jsp dans les var de session, ces même sous jsp appellent les var de session associées pour le remplissage.
    Voila tu es passé à une structure MVC

  3. #3
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Nan mais mon appli respecte le mvc, le code des jsp est pas dans la servlet, et c'est pas vraiment ca le problème.

    J'ai testé ce que tu m'as dit en vitesse pour voir, mais ca je vois mal comment ca peut marcher, ou du moins ya des trucs que j'ai pas du bien comprendre.

    Par exemple, le <url-pattern>/*</url-pattern> j'en fais quoi? Je mets le path de ma servlet? genre /servlet? Parce que si j'ai des liens à faire, comment je m'y prends? ^^ Je peux pas tous les faire pointer tous vers cette uri...

    Par ailleurs, dans la jsp body que je chargerais, j'ai des taglibs perso pour gérer l'affichage de mes données, et en utilisant ta méthode, elles ne sont pas du tout interprétées, donc j'ai meme pas d'affichage ^^.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Passe à Struts, ça fait ça très bien...
    Sinon, que cherches-tu à faire, quelle est la problèmatique au juste ?

    Je ne vois aucun intérêt à n'avoir qu'une seule servlet dans le modèle mvc, donc, tu dois avoir une idée derrière la tête (qui est peut-être liée à une méconnaissance de la techno)

    A+

  5. #5
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    En fait, dans toutes mes servlets, je trouve qu'il y a pas mal de code un peu redondant, que ca soit dans la fonction init() ou dans le traitement des requetes (pour charger des données dans le modèle des jsp de mes menus par exemple), donc je me disais que ca serait plus simple d'avoir une seule servlet qui "factoriserait" un peu tout ces traitements et qui intercepterait toutes les requetes, chargerait les données qui vont bien et enverraient au final les pages demandées.

    Par ailleurs, je trouvais plus clair d'avoir une seule classe a gérer que d'en avoir des dizaines qui vont sensiblement faire la meme chose.

    Mais effectivement comme tu dis, je connais pas bien la techno. Si ca se trouve c'est pas un truc a faire ^^

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Rien n'empêche de créer des classes pour ces traitements communs et de les utiliser partout... mais créer une seule servlet qui "sert" différent type de formulaire, ça n'est pas vraiment dans le concept mvc, même si dans l'absolu, on peut le faire...
    Disons qu'il serait judicieux de créer un contrôleur (1 servlet) par type d'écran (et donc de formulaire), quitte à créer une classe abstraite de base qui contienne les méthodes communes et qu'étendraient les contrôleurs.
    Il y a différentes façons de faire...

    A+

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Struts fonctionne avec un seul controlleur : une servlet.
    C'est du mvc2.

    Si on a plusieurs controlleurs, c'est du mvc classique.

    Le mvc2 est évidemment plus simple.
    Il évite de déclarer 50 servlets dans le web.xml.

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Il est certain que si le problème est de limiter le nombre d'entrées dans web.xml le mieux serait de passer à struts (comme je le suggérait plus haut), mais d'un autre côté, il faut bien l'assimiler l'bestiaux, ça ne se fait pas en 1 jour

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Entièrement d'accord.

  10. #10
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Autant pour moi, j'aurais du dire mvc 2 au lieu de mvc puisque c'est ce que j'ai plutot envie de faire.

    Pour le coup de la classe abstraite, ouais j'y ai pensé après coup mais ce qui me gene en fait c'est vraiment le fait d'avoir une servlet par jsp.

    J'ai plus ou moins résolu mon problème la, en mappant chaque url à traiter avec la servlet et en testant dans celle ci quelle est l'uri demandé. La bidouille ne me parait pas ce qu'il y a de plus propre mais bon, pour le moment ca marche ^^

    Par contre, si ca ne te dérange pas, je serais preneur pour un vague exemple de ce que tu dis avec struts. Pour le moment, je m'en sers mais uniquement pour les formulaires (et assez moyennement je pense ), mais je dois dire que j'avais pas compris que ca pouvait servir a autre chose ^^

    Merci de vos réponses en tout cas

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Par contre, si ca ne te dérange pas, je serais preneur pour un vague exemple de ce que tu dis avec struts. Pour le moment, je m'en sers mais uniquement pour les formulaires (et assez moyennement je pense ), mais je dois dire que j'avais pas compris que ca pouvait servir a autre chose ^^
    Un exemple de quoi (j'ai perdu le fil ) ?

  12. #12
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Ouais je me suis dit aussi que ca serait ptete pas clair, j'ai failli éditer mais finalement nan ^^

    Bah je sais pas trop, tu me proposes d'utiliser struts. Pour moi struts ca sert que pour les formulaires, donc la comme c'est pas le cas, je serais curieux de voir a quoi d'autre ca peut servir

  13. #13
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Mais tu voulais bien créer une servlet qui route tes demandes à l'origine non ?
    Donc, tu peux utiliser une action liée à un formulaire (que tu répèteras dans toutes les pages) pour traiter les paramètres qui te serviront à "router".
    Ensuite, les différentes sorties seront gérées normalement par la valeur de retour de ton action...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <form-bean name="MonForm" type="mon.package.MaClasseForm"/>
    ...
    <action path="/monRouteur" name="MonForm" type="mon.package.MonAction">
       <forward name="root1" path="/dossier/maPage1.jsp"/>
       <forward name="root2" path="/dossier/maPage2.jsp"/>
       <forward name="root3" path="/dossier/maPage3.jsp"/>
       <forward name="root4" path="/dossier/maPage4.jsp"/>
       <forward name="root5" path="/dossier/maPage5.jsp"/>
       <forward name="root6" path="/dossier/maPage6.jsp"/>
       <forward name="root7" path="/dossier/maPage7.jsp"/>
    ... etc
    </action>
    ...
    Bon, maintenant, je ne sais pas trop pourquoi tu veux faire ça plutôt que de lier les pages jsp entre elles directement, peut-être des substitutions en fonction d'un contexte ? Je n'en sais rien, mais là, tu peux explorer cette voie...

    A+

  14. #14
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Ouais je sais pas trop, ca me parrait pas tres naturel ton truc ^^

    En tout cas merci de tes réponses, ma solution marche, donc pour le moment disons que je m'en contenterai

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser une seule commande pour créer plusieur fichier
    Par waldomania dans le forum Administration système
    Réponses: 1
    Dernier message: 13/12/2009, 17h43
  2. une seule boite! pour tout une base
    Par stephanech dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 29/04/2009, 08h20
  3. Réponses: 13
    Dernier message: 29/05/2008, 11h27
  4. [Formule]Une seule formule pour toute la colonne ?
    Par marot_r dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/04/2007, 20h19
  5. [VS 2005][C#] Une seule icone pour tous les formulaires.
    Par Gold.strike dans le forum Windows Forms
    Réponses: 5
    Dernier message: 26/09/2006, 15h56

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