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 :

[debutant] envoyer des variables de servlet en servlet


Sujet :

Servlets/JSP Java

  1. #1
    Battosaiii
    Invité(e)
    Par défaut [debutant] envoyer des variables de servlet en servlet
    Bonjour,

    Je suis nouveau sur ce forum J2EE, j'aimerais profiter de la sagesse des experimentes .

    J'ai un probleme avec un menu. J'ai creer un menu dans un servlet pour le renvoyer aux clients :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        		if(condat.identify(req.getParameter("login"),req.getParameter("password")))
    	    		{
    	    			System.out.println("\nAcess granted proceed to menu"); 
    	    			out.println("<HTML><HEAD><TITLE>Menu</TITLE></HEAD>");
    		            out.println("<BODY><A HREF=http://localhost:8080/OnlineBankingSystem/servlet/account_1>Accounts</A><BR>");
    		            out.println("<A HREF=http://localhost:8080/OnlineBankingSystem/serlet/transfer_1>Withdrawal</A><BR>");
    Le menu apparait bien mais le probleme c'est que j'aimerais rediriger la variable login avec les liens du menu. je sais que faire un formulaire ca marche mais
    j'ai envie d'avoir un lien plutot qu'un bouton de type submit pour rediriger le client sur un autre servlet avec la variable login. De plus c'est plus complique avec un formulaire.

    Quand je redirige ma page vers account_1 ou transfer_1 comme je le fais j'ai cette erreur :

    HTTP method GET is not supported by this URL
    J'ai envie de laisser la methode POST sur account_1.java et transfer_1.java pour plus de securite entre mes servlets. Je ne veux pas que quelqu'un ait acces a la variable login...
    J'espere avoir ete clair...[/code]

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    tu l'envoie à la servlet via un formulaire en POST ??


  3. #3
    Battosaiii
    Invité(e)
    Par défaut
    Sur ce servlet ou j'ai ecrit les lignes au dessus je redirige le client grace aref sur 2 servlets. J'aimerais aussi envoyer une variable login .

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Citation Envoyé par Battosaiii
    Sur ce servlet ou j'ai ecrit les lignes au dessus je redirige le client grace aref sur 2 servlets. J'aimerais aussi envoyer une variable login .
    ouii c'est une information que tu dois enregistrer en request ou en session..

    request.setAttribute() et session.setAttribute()

  5. #5
    Battosaiii
    Invité(e)
    Par défaut
    Pour naviguer entre differents servlet avec la methode POst comment faire ?
    aref semble marcher si on fonctionne avec doget dans les servlets. Doi je fonctionner avec des formulaires ? Dans ce cas je ne peux naviguer que d'1 servlet a 1 servlet. Puisque on ne peut faire que formulaire dans une page...
    Si quelau'un pouvait m'eclairer...

  6. #6
    Battosaiii
    Invité(e)
    Par défaut
    help svp !

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 178
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par Battosaiii
    Pour naviguer entre differents servlet avec la methode POst comment faire ?
    aref semble marcher si on fonctionne avec doget dans les servlets. Doi je fonctionner avec des formulaires ? Dans ce cas je ne peux naviguer que d'1 servlet a 1 servlet. Puisque on ne peut faire que formulaire dans une page...
    Si quelau'un pouvait m'eclairer...
    Non on peut faire autant de formulaire que l'on veut dans une page

  8. #8
    Battosaiii
    Invité(e)
    Par défaut
    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
    if(condat.identify(req.getParameter("login"),req.getParameter("password")))//si le login et le password est correct afficher le menu ( 2 forumlaires)
    	    		{
    	    			System.out.println("\nAcess granted proceed to menu"); 
    	    			/*
    	    			out.println("<HTML><HEAD><TITLE>Menu</TITLE></HEAD>");
    		            out.println("<BODY><A HREF=http://localhost:8080/OnlineBankingSystem/servlet/account_1>Accounts</A><BR>");
    		            out.println("<A HREF=http://localhost:8080/OnlineBankingSystem/serlet/transfer_1>Withdrawal</A><BR>");
     
    					out.println("</BODY></HTML>");
    		        	out.close();*/
     
    		        	out.println("<HTML><HEAD><TITLE>Menu</TITLE></HEAD>");
    		            out.println("<BODY><FORM name ='Accounts' action=http://localhost:8080/OnlineBankingSystem/servlet/account_1 method='POST' >");
    		            out.println("<input type='hidden' name='login' value='123'><BR><INPUT TYPE='submit' value='Accounts'> ");
     
    		            out.println("<FORM name ='Transfer' action=http://localhost:8080/OnlineBankingSystem/servlet/transfer_1 method='POST' >");
    		            out.println("<input type='hidden' name='login' value='123'><BR><INPUT TYPE='submit' value='Transfer'> ");
    					out.println("</BODY></HTML>");
    		        	out.close();
    	    		}
    Pour permettre aux clients de parcourir les servlets je lui renvoie 2 formulaires, un qui va sur le servlet :transfer_1 et l'autre qui va sur account_1. Le probleme c'est que lorsque j'execute un des 2 boutons submit il va uniquement sur account_1 et jamais transfer_1.
    Comment faire pour naviguer dans l'un ou l'autre ?

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 178
    Points : 201
    Points
    201
    Par défaut
    heu c'est moi qui comprend mal ton code, ou il y a deux page HTML dans ta page ? C'est evidement interdit.

  10. #10
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    interdit, je ne sais pas mais en tout cas, c'est pas propre
    Il faudrait plutot que tu rediriges toutes tes données en post vers un unique fichier qui va renvoyer respectivement ces données à tes fichiers de traitement concernés ...

    Ca sera bien plus clair ... car ici ... hum ... c'est plutot moche hein

    En gros, voici une architecture qui peut s'appliquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    formulaire.java 
       |
       |-----> traitementForm.java
                          |
                          |-----> FormManagerAccount.java
                          |-----> FormManagerTransfert.java
                          |
                          |>>Affichage du resultat du traitement...
    Bien évidemment, cela nécéssite une architecture derriere avec un envoi de toutes les données à chaque objet de traitement de formulaire.
    Pour faire propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //interface FormManager.java
     
    public interface FormManager{
          init();
          isValid();
          run();
    }
    Tu implémentes cela pour chaque FormManager ...
    Puis dans ton traitementForm.java, tu appelles chaque objet et lui envoie les paramètres du POST pour qu'il initialise ses données ...
    puis tu appelles, isValid() pour valider le formulaire
    et run() pour effectuer les traitement métiers qui sont rattacher a ton concept traité (ajout du compte ou bien du transfert, etc...)

    Bon, si ca se trouve, personne n'a rien compris ... mais il est possible de me demander quelques explications :p
    See you, space cowboy... and if you're satisfied, click on

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 178
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par BizuR
    interdit, je ne sais pas mais en tout cas, c'est pas propre
    Non c'est interdit par le standard. Il doit y avoir un et un unique header par page html. Sinon ce n'est plus un header.

    Mais bon suffit de virer le deuxieme html et header ... de son code pour que cela soit ok, ce n'est pas un gros problème

  12. #12
    Battosaiii
    Invité(e)
    Par défaut
    Ilk n'y pas 2 headers . Si vous regardez bien j'avais mis en commentaires mais bon c'est ma faute j'aurais du effacer. Bizur je comprends pas trop ton diagramme comme envoyer a oartir du formulaire les variables a 2 differentes diestinations concretements ?

  13. #13
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    moi jparlais bien des deux balises FORM
    je sais pas si ca marche mais c pas très propre je trouve

    en gros, mon archi gére cela :

    tu as un seul formulaire qui redirige les infos en POST a une page de traitement ...
    en version simplifiée, tu recupere ces variables dans ton fichier de traitement et tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //recuperation des variables dans tes objets qui seront affectés a leur propre fichier de traitement (exemple Map)
    ...
    //fin de recuperation des variables
    //objet traitant les infos sur un Account
    FMAccount = new FMAccount(mapAccount); // dans le cas d'un objet MAP comme précisé avant
    //objet traitant les infos de transfert;
    FMTransfert = new FMTransfert(mapTransfert);
     
    if ((FMAccount.isValid()) and (FMTransfert.isValid())){
          FMAccount.execute();
          FMTransfert.execute();
    }
    else {System.out.println("Formulaire incorrect, traitement non faisable");}
    Pour commenter le tout ... les deux FM implémentent l'interface suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //interface FormManager.java
    public interface FormManager{
     
          /*dans le constructeur, tu appelles juste cette méthode qui initialise les variables de l'objet ... (affectation des variables si elles sont présentent dans l'objet infos)*/
          init(Map infos);
     
         /*valide le contenu des informations saisies (surtout les verification d'un point de vue "regle de gestion de l'application", les controles de saisie pures (types, oblgatoire et facultatifs) sont peut etre mieux en javascript... c'est comme tu veux*/
          isValid();
     
        /*execute le code métier de traitement des informations (ajout/modif en base, instanciation d'un EJB, etc.)*/
          execute();
    }
    Voila ... et ainsi tu pourras toujours refaire ton formulaire et sa page de traitement ou encore rajouter des infos dans ton formulaire, l'impact de modification sera peut-être plus facile à cibler ... enfin, c'est une organisation à laquelle il faut s'habituer... J'ai réaliser tout ceci en PHP et je passais donc les infos aux objets en POST mais bon, je ne sais pas si cela est possible en JAVA/SERVLET donc je garantie rien et préfére te soumettre cette solution

    Si t'as d'autres question, hésites pas
    See you, space cowboy... and if you're satisfied, click on

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    Je trouve l'archi de Bizur plutot bonne.
    En general je pense que nous avons un actionForm par page.
    Apres a toi de differencier tes deux bouttons "submit" par exemple avec un Jscript qui va valuer un champ caché. Le dispatch se fait ensuite.
    Sinon tu devrais t'en sortir en faisant deux formulaires qui pointent sur des servlets differentes.

    Ciao

  15. #15
    Battosaiii
    Invité(e)
    Par défaut
    J'ai regarde mon code est j'ai reflechi . Tu as raison : il faut TOUJOURS diviser les taches, j'etais tellement presse de finir mon code...
    Merci pour ton implication ca m'a ouvert les yeux...

Discussions similaires

  1. Envoyer des variables de Flash vers PHP avec GET
    Par Gizmil dans le forum Dynamique
    Réponses: 1
    Dernier message: 19/11/2007, 00h52
  2. [debutant]Recuper des variables depuis un fichier propertie
    Par smutmutant2003 dans le forum Langage
    Réponses: 9
    Dernier message: 14/10/2007, 18h53
  3. Réponses: 6
    Dernier message: 14/03/2007, 22h04
  4. Réponses: 2
    Dernier message: 21/08/2006, 09h37
  5. Réponses: 1
    Dernier message: 15/05/2006, 18h05

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