Servlet: ajout de paramètres dans la request - Java - Programmation
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.
Marsh Posté le 16-10-2002 à 09:49:59
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
Marsh Posté le 16-10-2002 à 09:59:12
DarkLord a écrit a écrit : 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 !
Marsh Posté le 16-10-2002 à 10:01:21
DarkLord a écrit a écrit : 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()...
Marsh Posté le 16-10-2002 à 10:14:33
mmm il devrait y avoir moyen. Pourquoi est ce que setAttribute ne te convient pas?
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
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?
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 ??
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+
Marsh Posté le 16-10-2002 à 10:49:46
DarkLord a écrit a écrit : j'étais dans le cake |
Ca arrive, ca arrive...
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à )
Marsh Posté le 16-10-2002 à 11:13:55
impressionnant benou. Si ca marche alors là je suis impressioné
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.
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 ...
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
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.
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...
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
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.
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 ...
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.
Marsh Posté le 16-10-2002 à 12:28:50
y'a deja eu le MEME topic y'a 2-3 semaines
Marsh Posté le 16-10-2002 à 13:42:36
--greg-- a écrit a écrit : y'a deja eu le MEME topic y'a 2-3 semaines |
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.
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 :
|
Ca marche très bien, mais je ne trouve pas ça forcément bien clean... A défaut de temps pour surcharge le HttpRequest...
Marsh Posté le 17-10-2002 à 10:06:48
pas bête
Marsh Posté le 17-10-2002 à 11:20:49
DarkLord a écrit a écrit : pas bête |
bof
Marsh Posté le 17-10-2002 à 11:42:02
c'est le problème initial qui est très bof je dirai
faut pas s'étonner d'avoir des solutions pareilles par la suite
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 |
Et en quoi le problème initial est très bof, je te prie ????
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.
Marsh Posté le 17-10-2002 à 12:02:25
tiens j'avais pas lu la réponse de benou, idée interessante
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
Marsh Posté le 17-10-2002 à 12:04:20
--greg-- a écrit a écrit : quelle mauvaise foi |
en quoi je te prie
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 !
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 ! |
bon bon est bien d'accord alors
la bidouille, c'est bof. ça craint quoi.
wala.
pas besoin de faire des courbettes.
Marsh Posté le 17-10-2002 à 12:20:20
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