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 :

JSP->servlet->redirection


Sujet :

Servlets/JSP Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut JSP->servlet->redirection
    Bonjour,

    Voila j'ai une page JSP avec un formulaire.

    Ce que je voudrais c'est envoyer le formulaire a une servlets qui redirige directement soit vers le formulaire si erreur soit vers une autre page.

    Le hic c'est que je sais pas trop comment m'y prendre.
    Quand je redirige depuis la servlet ca change pas l'url et j'ai des problemes apres.

    Alors si quelqu'un pouvait me donner une piste ou un tutoriel bien expliqué merci.

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Salut

    Dans ta JSP
    method="post" action="taServlet"

    Dans ta Servlet,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getServletContext().getNamedDispatcher( "VueTonFormulaire" ).forward( request, response );

  3. #3
    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
    Billets dans le blog
    1
    Par défaut
    Il serait préférable de passer par un RequestDispatcher dans la servlet, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getRequestDispatcher("/chemin/relatif/maPage.jsp").forward(request, response);
    Pour la page, tu références la servlet dans la balise <form> attribut "action"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form action="<%=request.getContextPath()%>/laServlet" methode="POST">
    ... les champs <input> et autres ...
    </form>
    et le lien dans le web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    <servlet>
      <servlet-name>laServlet</servlet-name>
      <servlet-class>le.package.LaServlet</servlet-class>
     </servlet>
     
     <servlet-mapping>
      <servlet-name>laServlet</servlet-name>
      <url-pattern>/laServlet</url-pattern>
     </servlet-mapping>
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Donc en fait si je resume (à ma facon je dirais)


    Dans ma servlet je fais tout les traitements que je veux, puis au moment de la redirection je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    request.getRequestDispatcher("/chemin/relatif/maPageOK.jsp").forward(request, response);
     
    OU
     
    request.getRequestDispatcher("/chemin/relatif/maPageNOK.jsp").forward(request, response);
    Mais est-ce que ca propage le formulaire? (Je ne pense pas mais je prefere demander)

    Ma servlet ne contiendra alors aucun code html.
    Et si je vois bien l'effet l'url apparaitra pendant un laps de temps tres tres ... court avant de rediriger vers la page voulu.

  5. #5
    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
    Billets dans le blog
    1
    Par défaut
    Tu propages les données du formulaire puisqu'il s'agit du même request.
    Par contre, si tu veux faire une redirection, il ne faut pas utiliser le RequestDispatcher mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.sendRedirect("url à appeler");
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Autre question.

    Et si je veux passer une variable lors de ma redirection, quels sont les meilleurs options? Et comment faire?

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Par défaut
    Salut

    Pour envoyer une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("nomvariable",variable);
    et tu la récupères dans ta jsp avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getAttribute("nomvariable");
    @+

  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
    Billets dans le blog
    1
    Par défaut
    Tu as également la possibilité de rajouter des paramètres directement comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.sendRedirect("/le/chemin/maPage.jsp?param1=valeur1&param2=valeur2");
    ou méthode aurelientp...
    Tout dépend un peu du traitement que tu veux faire des paramètres et surtout la taille des données attachées (une URL est limitée en taille)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut communication servlet JSP et JSP servlet
    Bonjour,


    Pour le Servlet vers JSP:
    1- la classe suivante est une servlet qui envoie un objet (ArrayList ou String) vers une jsp (qui se trouve dans WEB-INF qui est la racine dans Tomcat comme WWW pour WAMP: easyPHP)
    2- la méthode this.getServletContext().getRequestDispatcher permet de rediriger vers la 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    import java.io.*;
    import java.util.*;
     
     
    public class objectExpediteur extends HttpServlet{
     
    	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//PrintWriter out = response.getWriter();	
     
    		String str =  new String("kamel");
    		request.setAttribute("chaine", str);
     
    		ArrayList list = new ArrayList();  
    		list.add("aa");
    		list.add("bb");
    		list.add("cc");			
    		request.setAttribute("table", list);
     
    		//RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/objectRecepteur.jsp");
    		RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/objectExpediteur.jsp");
    		rd.forward(request, response);		
    		//response.sendRedirect("http://localhost:8080/objectRecepteur.jsp");
    	}	
    }


    Pour JSP vers Servlet: Je vous propose une astuce pour envoyer des objets.. toujours avec les superbes méthode setAttribute() et getAttribute() ...pas mal non?
    1- Le principe est de prendre un ArrayList de le transformer en Chaine de caractère en concaténant les mots séparés par des '-' par exemple.
    2- L'envoie est simple :Utiser le paramètre de l'URL du formulaire.

    Allez voici le code
    Olala... désolé mais le code est en cours de construction.. Je vous pries de bien vouloir patienter...Merci

    Bon courage...Cordialement

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Merci de toutes ces reponses je vais pouvoir travailler tranquilement.

    Par contre que pensez vous de la mise en session de variable?

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 168
    Par défaut
    La mise en session d'objet est une bonne pratique si cela peut éviter des accès en base de données.
    Par contre, il faut faire attention à ne pas stocker trop d'objets dans la session car si le nombre d'utilisateurs augmente beaucoup, la taille mémoire utilisée par la session de chaque utilisateur va également augmenter! ce qui peut déclencher des OutOfMemory!

    Et attention aux références vers d'autres objets, listes d'objets, etc quand tu met en session un objet. Cela peut faire exploser la taille mémoire nécessaire

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut session vs communication servlet jsp
    Merci aurelientp,

    En effet ça peut vite faire "déborder la mémoire"!

    Vaut mieux utiliser l'envoi de paramètres au lieu des sessions qui sont plutot bien pour sécuriser les accès et personnaliser par exemple, notamment les objets, avec la méthode que j'ai cité plus haut!

    ça permet:
    de séparer les traitements de l'interface.
    rajouter facilement des classes java
    Modification facile de l'interface
    non saturation de la mémoire
    réutilisation du code

    Vive l'objet!!!

    A+

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Oui mais lors d'une redirection simple je peux pas reellement passer dobjet en post?

    Et pour les objets faut juste qu'il soit serializable?

    Et comment faire pour tester sur une page que je fais un post de cette manière. Car sur la meme page je peux ou pas l'avooir. d'ou différent traitement.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut pas clair
    j'ai pas bien saisi ce que tu veux dire?
    désolé

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Je vais essayer d'etre plus claire.

    Pour résumer le début
    1- j'ai ma JSP qui envoie un formulaire à une servlet pour traitement.
    Jusque la pas de soucis.

    2- Ma servlet fais le traitement et y a deux cas "reussite" et "echec"

    3- Maintenant ma servlet redirige (vers la page de jsp qui a envoyé le formulaire ou un autre c'est pas important)

    Donc comme je veux pas propager le formulaire j'ai opté pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.sendRedirect("url à appeler");
    Je ne veux pas utiliser le passage de variable par url.
    Mais je voudrais pouvoir rediriger en envoyant un objet.

    Donc la deux choix Session ou post d'apres ce que j'ai compris.

    Dans le cas de la session, Comment faire pour tester si une variable de session existe? (Et oui ma page JSP peut ne pas recevoir la dite variable dans certain cas et ca me fais une erreure)

    Dans le cas du post, comment avec la simple redirection envoyé mon objet?

    Ensuite question juste de verification pour envoyer un objet il faut que la classe soit serializable ou il faut autre chose?

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut C'est plus clair
    Merci pour ces éclaircissements,

    Alors pour l'envoie d'un objet en effet il faut qu'il soit sérialisable ou du moins qu'il hérite d'un objet sérialisable!

    Pour la redirection, pour le moment je n'ai testé que la redirection d'objets avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    request.setAttribute("table", list);
    RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/objectExpediteur.jsp");
    rd.forward(request, response);
    Et ça marche!

    Pour la redirection avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    response.sendRedirect("url à appeler");
    Je n'ai pas essayé, désolé.

    Pour l'utilisation de la variable session,il faut que tu me montre le code ou tu crée ta session aisin que celui ou tu dois tester l'existance de la variable session!
    En effet si tu crée ta variable de session et tu l'initialise avec

    en principe tu peut la récupérer avec l'instruction.

    Du code please,
    Bon courage...

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Pour la session c'est pas tant la mise en session qui pose probleme mais la recuperation.

    Je m'explique.
    Dans ma JSP on peut y acceder par plusieur page mais toute ne renvoie pas l'objet session erreur.
    Du coup quand j'essaye de le recuperer parfois il existe pas, et j'ai une erreur.
    Je voudrais juste tester l'existence de cette objet.

    Comment je le met en sessions dans ma servlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HttpSession session = req.getSession(true);
    session.setAttribute("erreur",new Erreur("Erreur de connection à la BDD"));

  18. #18
    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
    Billets dans le blog
    1
    Par défaut
    Dans la JSP, tu peux tester comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <%
    String erreur = (String)session.getAttribute("erreur");
    if ( erreur != null )
    {
       out.println(erreur);
    }
    %>
    ou si tu dois insérer du code html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <%
    String erreur = (String)session.getAttribute("erreur");
    if ( erreur != null )
    {%>
       <div>
          <input type="text" ... />
          etc...
       </div>
    <% } %>
    Là j'ai utilisé un objet String mais tu peux faire la même chose avec ton objet Erreur
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Donc en fait en java tu peux essayer d'appeler la valeur mais ca retournera null si ca existe pas dans le tableau de session?

    EDIT: Bon j'ai testé merci pour toutes ces informations ca m'a été très très utile.

    Parfois les choses les plus simlpes sont les plus compliqué a comprendre (enfin pour moi lol)

    Du coup maintenant après de multiple test je vais peut-être opter pour la propagation du formulaire en lui ajoutant une variable peut--être objet.

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut faire passer des objets serialisables
    Oui zulot...
    une fois l'objet passé comme paramètre t'es tranquil, plus de session à "trimbaler" dans la mêmoire!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Redirection de JSP vers servlet
    Par janyoura dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 01/10/2013, 15h13
  2. Servlet et redirection sur une JSP via une URI
    Par xenoise dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 25/05/2012, 10h49
  3. Réponses: 1
    Dernier message: 20/07/2006, 17h46
  4. [JSP]remplir et envoyer un vecteur d'une jsp à une servlet
    Par moeeez dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 31/05/2005, 09h51
  5. Réponses: 9
    Dernier message: 14/04/2005, 17h45

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