Sauvegarder une requête pour l'exécuter apres login... [JSP/SERVLET] - Java - Programmation
Marsh Posté le 29-11-2004 à 11:05:58
en toute logique, même si c'est un peu tordu, ca devrait fonctionner ... tu peux filer la stacktrace entre le forward et le moment ou ca crache le nullpointer ?
Marsh Posté le 29-11-2004 à 11:18:10
Pour les traces, c un peu délicat, je te file les premieres lignes...
Je te file l'erreur dans le std_err:
Code :
|
et dans le sdt_out :
Code :
|
Tu dis que la méthode est tordue... pourquoi donc ? Et si tu as une méthode plus simple, je suis preneur...
Marsh Posté le 29-11-2004 à 11:48:55
J'ai trouve ca, apparement, c la meme technique ki est utilisee, mais ca va pas assez loin ...
http://forum.java.sun.com/thread.j [...] ID=1344316
Marsh Posté le 29-11-2004 à 16:00:45
Bon, prenons le pb sous un autre angle...
Est ce ke qqn peut m'expliker (ou me filer un lien) comment fonctionne le forward ?
En gros j'ai pigé qu'on peut faire :
Code :
|
Mais comment ca se se passe si le jsp cible attends des paramètres/attributs ? Ca ne semble pas fonctionner si je les colle en parametres du getRequestDispatcher. Donc, je suis censé les mettre ou ? Et la request qu'on passe en paramètre du forward, y a t'il des contraintes particulières dessus ?
Marsh Posté le 29-11-2004 à 22:07:23
maphi a écrit : Pour les traces, c un peu délicat, je te file les premieres lignes...
|
ouais ben voilà, websphere fait un cast à l'arrache en un de ses objets interne => ClassCastException.
Donc la seule solution c'est que tu lui files la request que t'as reçu en paramêtre : tu peux pas l'encapsuler.
Visiblement, la seule chose dont tu te sers dans la request que tu as sauvegardé c'est le requestURI, donc plutot que de sauvegarder le request en entier, sauvegarde juste la requestURI ...
Marsh Posté le 29-11-2004 à 22:12:07
maphi a écrit : Mais comment ca se se passe si le jsp cible attends des paramètres/attributs ? Ca ne semble pas fonctionner si je les colle en parametres du getRequestDispatcher. Donc, je suis censé les mettre ou ? Et la request qu'on passe en paramètre du forward, y a t'il des contraintes particulières dessus ? |
sisi : si tu mets des attributs dans la request avant le forward, tu vas les retrouver dans la jsp vers laquelle tu forwards.
et pour les pramètres ca arche aussi : c'est dans les specs du servlet 2.3 que les paramètres passées dans un getRequestDispatcher (sous le format /cible.jsp?param=value) doivent se retrouver en faisant un request.getPramater() dans la servlet cible.
Marsh Posté le 30-11-2004 à 08:38:37
Citation : sisi : si tu mets des attributs dans la request avant le forward, tu vas les retrouver dans la jsp vers laquelle tu forwards. |
Tu as entierement raison. Il fo obligatoirement passer les parametres directement dans le getRequestDispatcher. Lors du traitement de la jsp, tomcat recupere les parametres par un getParameterMap, websphere, non.
Ce qui explike que ca fonctionnait juska present sous tomcat et pas sous websphere.
Etonant kan meme k'on ne puisse pas simplement faire des setParameter de la meme maniere kon fait un setAttribute et ke la recuperation desdits parametres ne passe pas forcement par l'interface. Car c'est dit dans les specs aussi...
Citation : The request and response parameters must be either the same objects as were passed to the calling servlet's service method or be subclasses of the ServletRequestWrapper or ServletResponseWrapper classes that wrap them. |
Bref, je vais passer les parametres a la main, ca marche sous websphere ET tomcat, c'est juste un peu moins propre au nivo du code.
Merci en tout cas.
PS : tu as un lien sur les specs "du servlet 2.3" ou c'est precise ke l'on doit passé les params via l'url ?
Marsh Posté le 30-11-2004 à 09:34:08
maphi a écrit : |
c'est quelle version de WebSphere que tu utilses ? parce que c'est une une spécification de Tomcat ca, c'est une specification de la norme Servlet 2.3. Si Websphere se dit conforme à cette norme (inclue dans J2EE 1.3), il doit s'y conformer !
maphi a écrit : |
c'est logque qu'il n'y ait pas un setParameter : l'objet request représente la requête HTTP, elle n'est pas modifiable
Mais vraiment, j'ai l'impression que tu utilises un vieux websphere ... j'avais eu exactement le même problème en utilisant une ancienne version de JRun (servlet2.1),
maphi a écrit : |
http://www.jcp.org/aboutJava/commu [...] al/jsr053/
page 56 : SRV.8.1.1
Marsh Posté le 30-11-2004 à 10:04:14
Ha ben oui, c la version 4.0.3 ... qui est pas compatible servlet 2.3.
Ceci explikant cela.
Re merci, on aura au moins trouvé le fin mot de l'histoire
Marsh Posté le 29-11-2004 à 11:00:43
Bonjour tlm,
J'ai un bug que je ne m'explike pas, fo dire que je débute avec les jsp...
Je bosse sur une appli web qui demande une authentification (réalisée sur la page login.jsp). J'aimerai que l'utilisateur puisse entrer directement une url quelconque du site et pas seulement la page d'acceuil.
Par exemple, j'aimerai qu'il puisse taper au choix
http://localhost:8080/MyApp/Home.jsp
http://localhost:8080/MyApp/MyPage.do?id=1
Dans les deux cas, si l'utilisateur n'est pas loggé, il va être redirigé vers la page login.jsp, qui va se charger se l'authentification puis de rediriger vers la page saisie au début.
La requête initiale est donc sauvegarder dans un objet qui hérite de HttpServletRequestWrapper :
Lorsque j'exécute ça, je sauvegarde les paramtres, les attributs, l'uri et le contextPath de la requete dans des variables membres de SavedHttpServletRequest.
Je réalise donc l'authentification puis je reexecute la fameuse page :
Voila en gros ce que le prog fait.
Le pb, c'est que tout ca fonctionne tres bien sous tomcat, mais plante lamentablement sous websphere. Avec un null pointer exception lors de l'exécution du forward.
Je précise que ce n'est pas moi qui ai écrit l'appli (j'ai dit que je débutait hein :-) et que donc, je ne sais pas si cette méthode est la bonne... vous en pensez quoi ?
Message édité par maphi le 29-11-2004 à 11:03:29