Servlet: ajout de paramètres dans la request

Servlet: ajout de paramètres dans la request - Java - Programmation

Marsh Posté le 16-10-2002 à 09:22:33    

Yo les gars,
 
Est-ce possible d'ajouter des paramètres dans la request des servlets ?
 
En gros, j'ai un premier servlet qui fait un traitement avant de passer la main (appel sur RequestDispatcher.forward() a priori) à une autre servlet. J'aimerais rajouter des paramètres de requête au deuxième servlet, histoire de lui faire croire que ces données-là étaient envoyées par le formulaire.
 
Je n'ai rien trouvé là-dessus, la méthode setAttribute() ne correspond pas à ce que je souhaite faire.
 
Merci pour votre aide

Reply

Marsh Posté le 16-10-2002 à 09:22:33   

Reply

Marsh Posté le 16-10-2002 à 09:30:16    

et un sendRedirect ca te plait pas ?

Reply

Marsh Posté le 16-10-2002 à 09:46:08    

Non, dans la mesure où d'une part, je voudrait compléter la request avec des paramètres de sécurité que l'utilisateur ne doit pas connaître, et que d'autre part, si je fais un redirect, il faut que je reconstruise complètement l'URL avec tous les anciens paramètres de la request, et ça m'emmerde de faire ça, surtout que précédemment, c'était un POST de formulaire, et non pas un GET.

Reply

Marsh Posté le 16-10-2002 à 09:49:59    

:heink:  :heink:  :heink:  
 
bin tu attaches des objets à ta requete initialee et tu passes la requete modifiée dans ton forward. Je ne vois pas où il y a un problème


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 16-10-2002 à 09:59:12    

DarkLord a écrit a écrit :

 :heink:  :heink:  :heink:  
 
bin tu attaches des objets à ta requete initialee et tu passes la requete modifiée dans ton forward. Je ne vois pas où il y a un problème




lui il voudrait que ce soir des paramètres, pas des attributs comme ca, la servlet marchera comme si c'était l'utilisateur qui avait envoyé les paramètres.
 
mais bon, je vosi pas pkoi tu t'emmerdes, passes ca en attribut et zou !

Reply

Marsh Posté le 16-10-2002 à 10:01:21    

DarkLord a écrit a écrit :

 :heink:  :heink:  :heink:  
 
bin tu attaches des objets à ta requete initialee et tu passes la requete modifiée dans ton forward. Je ne vois pas où il y a un problème




 
Je suis d'accord, c'est exactement ce que je veux faire, mais je ne sais pas comment. Je ne peux pas utiliser request.setAttribute()...

Reply

Marsh Posté le 16-10-2002 à 10:14:33    

mmm il devrait y avoir moyen. Pourquoi est ce que setAttribute ne te convient pas?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 16-10-2002 à 10:19:44    

DarkLord a écrit a écrit :

mmm il devrait y avoir moyen. Pourquoi est ce que setAttribute ne te convient pas?




 
Bah, en fait, c'est que le servlet que je veux appeler, c'est pas moi qui l'ai fait et je ne peux pas y toucher... Donc je ne peux pas rajouter les getAttribute() qui iraient bien :(

Reply

Marsh Posté le 16-10-2002 à 10:21:28    

bin alors je ne vois pas comment diable ta deuxième servlet pourrait récupérer quoi que ce soit si il n'y a pas de getAttribte dessus.
 
C'est un non sens total ta question non?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 16-10-2002 à 10:35:22    

DarkLord a écrit a écrit :

bin alors je ne vois pas comment diable ta deuxième servlet pourrait récupérer quoi que ce soit si il n'y a pas de getAttribte dessus.
 
C'est un non sens total ta question non?




 
Et le getParameter() ????? Comment fais-tu pour récupérer les données d'un formulaire dans 1 servlet ??

Reply

Marsh Posté le 16-10-2002 à 10:35:22   

Reply

Marsh Posté le 16-10-2002 à 10:38:42    

oui tu as tout à fait raison. Mes excuses pour ce coup là j'étais dans le cake. Il faut que je réfléchisse mais il y a peut etre moyen en jouant avec les headers HTTP.
 
A voir ...
 
A+


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 16-10-2002 à 10:49:46    

DarkLord a écrit a écrit :

j'étais dans le cake



 
Ca arrive, ca arrive...

Reply

Marsh Posté le 16-10-2002 à 11:12:22    

j'ai la solution, je pense :  
 
tu peux faire un forward mais qui ne passe pas le même objet request :
 
tu créés une nouvelle classe Request (en utilisant le HttpServletRequestWrapper ou un truc dans le genre) qui redéfinie la méthode getParameter(). Dans cette méthode, tu appelles le getParameter de la request d'origin, et si ca te retourne nul, tu retourne le getAttribute().  
 
Comme ca ca devrait marcher.
 
(Je suis fier de mon idée là :) )

Reply

Marsh Posté le 16-10-2002 à 11:13:55    

:eek2: impressionnant benou. Si ca marche alors là je suis impressioné :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 16-10-2002 à 11:20:47    

benou a écrit a écrit :

j'ai la solution, je pense :  
 
tu peux faire un forward mais qui ne passe pas le même objet request :
 
tu créés une nouvelle classe Request (en utilisant le HttpServletRequestWrapper ou un truc dans le genre) qui redéfinie la méthode getParameter(). Dans cette méthode, tu appelles le getParameter de la request d'origin, et si ca te retourne nul, tu retourne le getAttribute().  
 
Comme ca ca devrait marcher.
 
(Je suis fier de mon idée là :) )




 
Pas mal... Un peu lourd, mais pas mal... Ce qui me gène, c'est que le fonctionnement de ce nouveau ServletRequest dépend entièrement du servlet que je veux appeler : en gros, il va falloir que je test le parametre que ce servlet veut récupérer ; en fonction du résultat de ce test, je renvoie mes paramètres ou ceux du vrai ServletRequest... Je sais pas trop.

Reply

Marsh Posté le 16-10-2002 à 11:24:50    

je suis quasi sur que ca va fonctionner : le coup du wrapping de request (ou de response) c'est vachement utilisé dans les Filtre et je travaille assez intenssément dessus depuis quelques temps ...

Reply

Marsh Posté le 16-10-2002 à 11:27:06    

_Mac_ a écrit a écrit :

 
 
Pas mal... Un peu lourd, mais pas mal... Ce qui me gène, c'est que le fonctionnement de ce nouveau ServletRequest dépend entièrement du servlet que je veux appeler : en gros, il va falloir que je test le parametre que ce servlet veut récupérer ; en fonction du résultat de ce test, je renvoie mes paramètres ou ceux du vrai ServletRequest... Je sais pas trop.




 
attend y a rien de lourd du tout !
et t'as rien à tester : tu fais juste que ca va chercher dans les attributs si ca n'a pas trouvé dans les paramètres.
 
en quelques lignes ca fait exactement ce que tu veux

Reply

Marsh Posté le 16-10-2002 à 11:28:34    

_Mac_ a écrit a écrit :

 
je renvoie mes paramètres ou ceux du vrai ServletRequest... Je sais pas trop.




mais nan, dans tous les cas tu renvoies les paramètres du vrai servlet request. Ya que dans les cas où ce résultat serait nul que tu vas chercher dans les attributs du vrai servlet request.

Reply

Marsh Posté le 16-10-2002 à 11:30:39    

benou a écrit a écrit :

 
 
attend y a rien de lourd du tout !
et t'as rien à tester : tu fais juste que ca va chercher dans les attributs si ca n'a pas trouvé dans les paramètres.
 
en quelques lignes ca fait exactement ce que tu veux




 
Tu peux pas renvoyer un attribut de requête comme ça : c'est bien quand l'attribut est un String, mais quand ça n'en est pas un, c'est pas forcément terrible. Après, t'as un souci si le servlet cible fait un traitement spécifique important pour le cas où le paramètre n'existe pas. T'as des risques d'effets de bors important dans le cas où les attributs et les paramètres portent le même nom...

Reply

Marsh Posté le 16-10-2002 à 11:35:17    

_Mac_ a écrit a écrit :

 
Tu peux pas renvoyer un attribut de requête comme ça : c'est bien quand l'attribut est un String, mais quand ça n'en est pas un, c'est pas forcément terrible.



 
ben ca ca se test. Et puis si la servlet à laquelle tu veux envoyé la requete est prévue pour recevoir directement les infos d'un formulaire, elle ne devrait pas avoir d'attribut dans sa request. Donc les attrbuts présents sont ceux que tu aura mit à savoir des String
 

_Mac_ a écrit a écrit :

Après, t'as un souci si le servlet cible fait un traitement spécifique important pour le cas où le paramètre n'existe pas. T'as des risques d'effets de bors important dans le cas où les attributs et les paramètres portent le même nom...



 
attend, si le paramètre ne doit pas exister, c'est à toi de ne pas mettre l'attribut.
 
et puis si tu veux pas utiliser les attributs, tu fait autre chose : tu associe une Map à ta WrappedRequest, tu mets tes paramètres supplémentaire dedans, et la methode getParameter va chercher dans les parametres, puis dans la Map (plutot que dans les attributs) si le paramêtre n'existe pas.
 
j'ai l'impression que tu mélanges les problèmes :/


Message édité par benou le 16-10-2002 à 11:36:11
Reply

Marsh Posté le 16-10-2002 à 12:00:38    

benou a écrit a écrit :

 
j'ai l'impression que tu mélanges les problèmes :/




 
Je ne mélange pas les problèmes, j'analyse ta solution. Tu l'as dit toi-même :
 

benou a écrit a écrit :

 
Dans cette méthode, tu appelles le getParameter de la request d'origin, et si ca te retourne nul, tu retourne le getAttribute().




 
Je dis tout simplement qu'en faisant ça, c'est risqué.
 
Bref, passons.
 
Ton idée de Map est effectivement mieux que mes tests à la con.

Reply

Marsh Posté le 16-10-2002 à 12:06:34    

_Mac_ a écrit a écrit :

 
Je dis tout simplement qu'en faisant ça, c'est risqué.




ben il me semblait que quand tu avais expliqué ton problème tu disais que la servlet vers laquelle tu voulais rediriger la requête avait été faite pour être appelée directement => dans ce cas là, elle ne devait pas avoir d'attribut donc le problème se possait pas.
 
mais peut être que j'ai mal compris ...

Reply

Marsh Posté le 16-10-2002 à 12:26:27    

Je sais que dalle sur ce servlet : tout ce que je connais, c'est l'URL de mapping, et donc je ne sais pas du tout ce que fait le servlet avant d'utiliser les paramètres d'URL. Si ça se trouve, il crée des attributs de requests qui portent le même nom que les paramètres d'URL juste avant d'appeler les getParameter()...
 
Mais bon, c'est pas con ton truc, quand même, je vais sûrement m'en inspirer.

Reply

Marsh Posté le 16-10-2002 à 12:28:50    

:fou: y'a deja eu le MEME topic y'a 2-3 semaines :fou:
 


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 16-10-2002 à 13:42:36    

--greg-- a écrit a écrit :

:fou: y'a deja eu le MEME topic y'a 2-3 semaines :fou:
 
 




 
Tu fais référence au thread "Communication Inter-Servlet" ??? C'est pas du tout ce que je veux faire : je cherche à passer la main à un servlet (forward) en rajoutant des paramètres dans la request.

Reply

Marsh Posté le 16-10-2002 à 23:00:56    

alors tu t'en es sorti finalement ?

Reply

Marsh Posté le 17-10-2002 à 09:21:30    

J'ai trouvé une méga gruge ! En fait, j'ai directement rajouté mes paramètres dans le getRequestDispatcher :
 

Code :
  1. getServletContext().getRequestDispatcher("/maServlet2?var1=val1&var2=val2" ).forward(request, response);


 
Ca marche très bien, mais je ne trouve pas ça forcément bien clean... A défaut de temps pour surcharge le HttpRequest...

Reply

Marsh Posté le 17-10-2002 à 09:30:24    

tiens, je savais pas qu'on pouvait faire ca....

Reply

Marsh Posté le 17-10-2002 à 09:36:20    

Je trouve ça surprenant, aussi :)

Reply

Marsh Posté le 17-10-2002 à 10:06:48    

pas bête :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-10-2002 à 11:20:49    

DarkLord a écrit a écrit :

pas bête :)



bof :o


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 17-10-2002 à 11:42:02    

c'est le problème initial qui est très bof je dirai :o
 
faut pas s'étonner d'avoir des solutions pareilles par la suite :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-10-2002 à 11:56:04    

DarkLord a écrit a écrit :

c'est le problème initial qui est très bof je dirai :o




 
Et en quoi le problème initial est très bof, je te prie ????

Reply

Marsh Posté le 17-10-2002 à 12:01:49    

bin par bof je veux dire que c'est qqch d'assez inhabituel quoi. Donc on est obligé de bidouiller un peu pour trouver une solution.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-10-2002 à 12:02:25    

tiens j'avais pas lu la réponse de benou, idée interessante :)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 17-10-2002 à 12:02:44    

DarkLord a écrit a écrit :

bin par bof je veux dire que c'est qqch d'assez inhabituel quoi. Donc on est obligé de bidouiller un peu pour trouver une solution.



quelle mauvaise foi :o


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 17-10-2002 à 12:04:20    

--greg-- a écrit a écrit :

quelle mauvaise foi :o




 
en quoi je te prie  :??:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-10-2002 à 12:17:58    

DarkLord a écrit a écrit :

bin par bof je veux dire que c'est qqch d'assez inhabituel quoi. Donc on est obligé de bidouiller un peu pour trouver une solution.




 
Ca c'est clair !! Pour de la bidouille, c'est de la belle bidouille !  :sol:

Reply

Marsh Posté le 17-10-2002 à 12:19:59    

_Mac_ a écrit a écrit :

 
 
Ca c'est clair !! Pour de la bidouille, c'est de la belle bidouille !  :sol:  



bon bon est bien d'accord alors
la bidouille, c'est bof. ça craint quoi.
wala.
pas besoin de faire des courbettes.


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 17-10-2002 à 12:20:20    

:heink:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed