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 :

Communications entre Servlet et JSP


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut Communications entre Servlet et JSP
    Bonjour,

    J'ai écrit une servlet, qui appelle une page JSP de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try 
      {
     lb.session.setAttribute("Communes",v_communes);
      lb.session.setAttribute("MyBean",lb);  
    setServletContext().getRequestDispatcher("/maServlet").forward(lb.request, lb.response);
     lb.out.println("Je suis revenu"); 
     return null;
     
      } 
    catch (Exception ex){lb.out.println(ex.toString()); return null;}
    lb est une structure (bean) de variables dans laquelle on retrouve : session, request, response, + variables de l'application... etc...

    Cela marche très bien. Maintenant est-il possible de revenir dans la servlet en passant un String ? Si oui, comment faire.

    Merci

  2. #2
    Membre actif Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Points : 241
    Points
    241
    Par défaut
    C'est dans ton web.xml que cela se passe.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <servlet-mapping>
    		<servlet-name>ta_servlet</servlet-name>
    		<url-pattern>ta_jsp</url-pattern>
    	</servlet-mapping>
    C'est ici que tu vas mettre en relation servlet et jsp. Ensuite dans ta jsp il ne te reste plus qu'à y mettre un formulaire pour transmettre ton String à la servlet
    Non l'homme ne descend pas du singe, il descend plutôt du mouton..

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    Je n'ai aucun problème pour passer le contrôle de la servlet à la JSP.
    Mon fichier web.xml contient bien ce que tu décris.
    Ma question était :

    Lorsque je suis dans la JSP que j'ai exécuté son code, puis-je revenir dans la servlet à l'endroit d'où je suis parti en passant un string pour qu'il soit traité par la servlet ?

    Quoi qu'il en soi, merci de m'avoir répondu. SI tu as d'autres idées n'hésite pas.

  4. #4
    Membre actif Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Points : 241
    Points
    241
    Par défaut
    Ah ok, Il y a un moyen simple (enfin, si j'ai bien compris ton problème).

    Il s'agit de transmettre un attribut à ta servlet, par exemple un attribut "ACTION". Ensuite, quand tu arrivera dans la servlet, la première chose à faire c'est regarder la valeur de cet attribut. Si c'est la première fois que tu arrive (ACTION est donc null) tu fais ton traitement cité plus haut, par contre quand tu reviens dans ta servlet avec ton String il te faut avoir renseigner cet attribut ACTION de façon à faire un autre traitement dans ta servlet.

    Exemple :
    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
     
    String sAction = (request.getAttribut("ACTION") == null) ? "noAction" : (String) request.getAttribut("ACTION");
     
    if("noAction".equalsIgnoreCase(sAction)){ //premier passage dans ta servlet
     
    ....
    //tu fais le traitement cité plus haut
    ...
    return null;
    }
     
    if("retourString".equalsIgnoreCase(sAction)){ //admettons que tu aies donné comme valeur à ton attribut ACTION "retourString"
     
    String monString = request.getAttribut("MON_STRING");
    ....
    }
    Non l'homme ne descend pas du singe, il descend plutôt du mouton..

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    Oui, c'est une méthode que j'ai déjà expérimentée, mais justement je cherchais un moyen d'éviter de rappeler ma servlet, mais plutôt de faire l'équivalent d'un "return String;"

    Merci encore.

  6. #6
    Membre actif Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Points : 241
    Points
    241
    Par défaut
    Désolé mais je ne vois pas exactement ce que tu cherche à faire. Tu dis ne pas vouloir retourner dans ta servlet ? tu veux en faire quoi de ton String ?
    Non l'homme ne descend pas du singe, il descend plutôt du mouton..

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Si tu mets la servlet en debug, tu constateras que tu reviens à l'instruction qui suit le forward(request, response) une fois la jsp traitée.
    Ton problème, si je comprends bien, est de passer un paramètre de la jsp qui vient d'être traitée à la servlet appelante.
    Je ferai au plus simple :
    - dans la JSP : request.setAttribute("STATUS", "la_valeur");
    - dans la servlet : request.getAttribute("STATUS");

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Servlet1 extends HttpServlet
    {
        private static final long serialVersionUID = 1;
     
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            request.getRequestDispatcher("/page1.jsp").forward(request, response);
            Object status = request.getAttribute("STATUS");
            System.out.println(status);
        }
     
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    Merci OButterlin, c'est bien ce que je cherche à faire, mais je n'étais pas sûr que cela fonctionne. Car avec le code suivant :

    Servlet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try 
      {
    lb.session.setAttribute("MyBean",lb);
    lb.session.setAttribute("Nom","Gérard");
    lb.out.println("Je pars"); 
    lb.request.getRequestDispatcher("/JSPdeTest").forward(lb.request, lb.response);
    lb.out.println("Je suis revenu"); 
      }
     catch (Exception ex){lb.out.println(ex.toString()); return null;}
    JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <%
    MyBean lb       =  (MyBean) session.getAttribute("MyBean");
    String nom   =  (String) session.getAttribute("Nom");
     lb.out.println("Bonjour " + nom + ". Vous êtes  bien entré dans la JSP");
    %>


    "Bonjour Gérard. Vous êtes bien entré dans la JSP" est correctement affiché, mais je ne vois ni "Je pars" ni "Je suis revenu".

    C'est pour cette raison que je me demandais si je revenais dans ma servlet à l'instruction qui suit l'appel de la JSP.

    Avez-vous une idée ?

    Encore merci.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Que fait lb.out.println ?
    Tu veux écrire dans la page pour que ça apparaisse pour l'utilisateur ou autre chose ?
    Si c'est le cas, dans la page, il faudrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    out.println(".......");
    Par contre, depuis la servlet, ce ne sera pas possible comme ça.

    Bref, quel est le besoin exactement ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    lb est un bean que j'ai créé et qui contient toutes les variables de session que j'ai copiées : "request", "response", "out", etc..et même "session".

    Au lieu de taper out.println(...) je tape lb.out.println(...) et cela marche très bien.

    En fait je m'aperçois que lors du retour de la JSP, il est impossible de compléter une page HTML en cours. J'ai donc complètement changé mon design et maintenant je n'ai plus aucun problème.

    Merci encore pour tout.

    Gérard

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

Discussions similaires

  1. Différences entre Servlet et JSP
    Par mamiberkof dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 21/01/2016, 15h48
  2. Réponses: 2
    Dernier message: 14/03/2011, 13h35
  3. Communication entre Servlets distantes
    Par infotron dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 02/08/2007, 14h19
  4. communication entre servlet
    Par aboubrams dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 10/11/2006, 14h30
  5. Communication entre servlets
    Par kam81 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 23/10/2006, 08h44

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