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 :

[Servlet] transfert de contrôle


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut [Servlet] transfert de contrôle
    Bonjour

    Une petite suite à mon thread de page d'attente.
    Voici mon problème. J'ai une page JSP où je remplis un formulaire. Pour un clic submit, je suis redirigé vers une servlet dite "page d'attente". Cette servlet passe le relais à une autre servlet dite de Processing où je mouline les données. Le problème se situe lors du passage entre la première servlet et la deuxième puisqu'apparemment, je perds des données en cours de route (un de mes paramètres est null).
    Voici comment je passe le relais dans ma première servlet :
    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
     
    session.setAttribute("waitPage", null);
    			java.util.Enumeration e = request.getParameterNames();
    			java.util.ArrayList al = new java.util.ArrayList();
    			while(e.hasMoreElements()){
    				al.add(e.nextElement());
    			}
    			if(al.size()>0){
    				java.util.Iterator it = al.iterator();
    				while(it.hasNext()){
    					if(it.next().toString().compareTo("job")==0){
    						javax.servlet.RequestDispatcher rd = request.getRequestDispatcher("archives.jsp");
    						rd.forward(request, response);
    					}
    				}
    			}
    			javax.servlet.RequestDispatcher rd = request.getRequestDispatcher("Prediction");
    			rd.forward(request, response);
    Merci d'avance de vos réponses et n'hésitez pas si j'ai été brumeux.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Histoire de faire avancer le fil, voici un peu plus de détails.
    Ma première page est donc un formulaire avec comme balise form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form name="parameters" method="post" action="Wait">
    Voici le code de ma servlet Wait :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public class Wait extends HttpServlet {
     
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    		doPost(request, response);
    	}
     
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.setContentType("text/html");
    		java.io.PrintWriter pw = response.getWriter();
    		javax.servlet.http.HttpSession session = request.getSession(true);
    		if ( session.getAttribute("waitPage") == null ) {
    			session.setAttribute("waitPage", Boolean.TRUE);
    			pw.println("<html><head>");
    			pw.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">");
    	        pw.println("<meta http-equiv=\"Refresh\" content=\"0\"></head><body>");
    	        pw.print("<div class=\"Waiting\">");
    	        pw.print("<img src=\"img/toplogo.jpg\"><br /><img src=\"img/wait_a.gif\">");
    	        pw.print("<br /><span class=\"spanwait\">Please, wait while processing</span></div>");
    		}
    		else{
    			session.setAttribute("waitPage", null);
    			java.util.Enumeration e = request.getParameterNames();
    			java.util.ArrayList al = new java.util.ArrayList();
    			while(e.hasMoreElements()){
    				al.add(e.nextElement());
    			}
    			if(al.size()>0){
    				java.util.Iterator it = al.iterator();
    				while(it.hasNext()){
    					if(it.next().toString().compareTo("job")==0){
    						javax.servlet.RequestDispatcher rd = request.getRequestDispatcher("archives.jsp");
    						rd.forward(request, response);
    					}
    				}
    			}
    			javax.servlet.RequestDispatcher rd = request.getRequestDispatcher("Prediction");
    			rd.forward(request, response);
    		}
    	}
     
    }
    Enfin, le code de ma 2ème servlet censé faire le process des données. Je l'ai remanié pour qu'elle m'affiche les arguments censés être "rangés" dans une Hashtable :
    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
     
    public class Prediction extends HttpServlet {
     
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		doPost(req, resp);
    	}
     
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		resp.setContentType("text/html");
    		java.io.PrintWriter pw = resp.getWriter();
    		Parameters params = new Parameters();
    		params.setParameters(req, pw);
    		params.printParameters(pw);
    }
    }
    Avec ceci, j'observe que ma table de hachage (contenu dans l'objet params) est vide . Or, si je n'appelle pas Wait mais directement Processing depuis mon formulaire, tout marche correctement.
    Pourquoi cette bizarrerie ?

    Merci d'avance.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  3. #3
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 887
    Par défaut
    Salut,

    question : tu n'as qu'un seul contexte, ou tes deux servlets seraient dans deux contextes différents ?

    autre question : pourquoi une servlet qui aurait des traitements "métier" ? Normalement, il s'agirait d'une classe ( singleton par exemple ) qui aurait les traitements. Je ne comprend pas pourquoi le choix de rediriger vers une autre servlet ?

    Sinon je vois mal pourquoi ton exemple bug; essaie de faire ça en incrémental, en testant avec très peu de lignes de code, puis progressivement en ajoutant certaines lignes de code jusqu'à trouver celle qui fait tout planter..

    Comme ça à première vue, j'ai du mal à voir d'où pourrait venir le pb. A+

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Salut KiLVaiDeN et merci de ta réponse.

    Mes servlets sont dans le même contexte.
    Par contre, si j'ai choisi de faire 2 servlets, c'est parce qu'initialement, la deuxième servlet (Processing) était directement appelé par mon formulaire. La servlet Wait est un développement récent et j'aurais voulu la connecter directement sans trop d'embarras. Apparemment, je perds des données entre la 1ère et la deuxième servlet.

    Merci encore pour l'aide.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 887
    Par défaut
    Pê ça marche mieux comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/Prediction");

  6. #6
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 892
    Par défaut
    Hello KiLVaiDeN

    Je pense que le problème vient du rafraîchissement de ma servlet Wait.java car je perds mes données à ce moment là.
    Y a t'il un moyen plus fin de bien transférer mes données ?
    Sinon, je vais tenter ta solution.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. [Applet]Transfert d'objet serialisé applet/servlet
    Par fanou28 dans le forum Applets
    Réponses: 7
    Dernier message: 22/02/2010, 21h45
  2. Réponses: 6
    Dernier message: 10/03/2007, 11h42
  3. Servlet : transfert de fichier binaires
    Par biniou14 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 21/09/2006, 10h10
  4. [JSP] Transfert de contrôle et erreur
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 18/09/2006, 16h19
  5. Transfert d'un objet d'une JSP vers une Servlet
    Par biohazard dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 21/06/2004, 16h51

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