exception dans une redirection [Tomcat] - Java - Programmation
Marsh Posté le 15-10-2002 à 11:03:49
t'as du code et ce que crache les logs?
Marsh Posté le 15-10-2002 à 11:09:19
DarkLord a écrit a écrit : t'as du code et ce que crache les logs? |
Ben le code part un peu dans tous les sens, et c'est pas moi qui l'ait ecrit, d'ou difficulté.
Ce qui jette l'exception c'est request.redirect("mapage.jsp" ).
Bon, c'est pas dramatique, vu que je peux contourner le probleme, mais j'aimerais quand même comprendre.
Et dans les logs j'ai juste la trace de l'exception :
|
Marsh Posté le 15-10-2002 à 11:15:14
déjà c'est pas request, ensuite c'est pas redirect. La méthode que tu utilises est probablement sendRedirect de HttpServletResponse
Citation : |
ca aide?
Marsh Posté le 15-10-2002 à 11:19:44
DarkLord a écrit a écrit : déjà c'est pas request, ensuite c'est pas redirect. La méthode que tu utilises est probablement sendRedirect de HttpServletResponse |
Ouais, ca doit être ca. En fait je passe par des objets intermédiaire, d'ou racontage de n'importe quoi.
Citation : |
Ben ca confirme ce que je pensais, c'est a dire que la réponse a déja été envoyée au client avant. Je vois pas ou je fais ca dans mon code, mais si c'est la seule explication, ben faut que je regarde mieux.
Merci.
Marsh Posté le 15-10-2002 à 11:26:17
sinon balance le corps de ton doGet/doPost pour voir ...
Marsh Posté le 15-10-2002 à 11:27:54
DarkLord a écrit a écrit : sinon balance le corps de ton doGet/doPost pour voir ... |
euh, nan, je t'assure que tu ne veux pas le voir
mais alors vraiment pas. Parfois j'ai un peu honte
Marsh Posté le 15-10-2002 à 11:29:09
comme tu veux ..
Marsh Posté le 16-10-2002 à 01:34:09
lorill a écrit a écrit : euh, nan, je t'assure que tu ne veux pas le voir mais alors vraiment pas. Parfois j'ai un peu honte |
quoted
ça peut tjs servir
Marsh Posté le 16-10-2002 à 09:08:04
un truc tout con aussi : oublie pas de mettre un return après chaque sendRedirect parce que sinon L'execution de la servlet continue
ex :
Code :
|
dans le cas de l'erreur, le send redirect va être envoyé, mais l'execution va continuer et la servlet va écrire le ok ce qui va provoquer une erreur d'état.
il faut donc faire ca :
Code :
|
Marsh Posté le 16-10-2002 à 09:13:42
benou a écrit a écrit : un truc totu con aussi : oublie pas de mettre un return après chaque sendRedirect parce que sinon ... |
c'est ce que je fais dans mon code, mais la c'est un truc qui m'est tombé dessus, et c'est tout dans des if imbriqués bien moches.
Marsh Posté le 16-10-2002 à 09:14:22
benou a écrit a écrit : un truc totu con aussi : oublie de mettre un return après chaque sendRedirect parce que sinon L'execution de la servlet continue ex :
|
...comme après un forward, c'est ça ?
Marsh Posté le 16-10-2002 à 09:28:34
El_Gringo a écrit a écrit : ...comme après un forward, c'est ça ? |
ouep !
Marsh Posté le 16-10-2002 à 09:47:26
D'ailleur c quoi la différence entre sendRedirect et un forward ?
Marsh Posté le 16-10-2002 à 09:48:31
El_Gringo a écrit a écrit : D'ailleur c quoi la différence entre sendRedirect et un forward ? |
le forward reste entre deux servlets au sein du conteneur, et le redirect passe par http, je crois.
Marsh Posté le 16-10-2002 à 09:48:58
lorill a écrit a écrit : le forward reste entre deux servlets au sein du conteneur, et le redirect passe par http, je crois. |
pas forcément une servlet ...
Marsh Posté le 16-10-2002 à 09:53:00
...j'vois pas trop dans quel cas utiliser l'un ou l'autre !
Jusqu'a maintenant j'utilise que des forward...
Marsh Posté le 16-10-2002 à 09:54:51
sendRedirect correspond au code de réponse HTTP 302, c'est à dire que le contenu recherché a changé de localisation, et on indique la nouvelle localisation. Le browser fait alors une autre requête vers cette nouvelle url.
lors d'un dispatch, tout se passe au sein du serveur : la servlet décide de "passer la main" pour délivrer le contenu demandé (par exemple à une jsp)
Marsh Posté le 16-10-2002 à 09:57:00
ben tu vas être emmerdé avec le forward quand tu forward vers une servlet ou une jsp qui est pas dans le même répertoire : les liens relatifs vont être niqués
le sendRedirect est vachement plus long vu qu'il y a un dialogue clien serveur supplémentaire.
en faite, le sendredirect est une réponse en lui même alors que le dispatch demande à quelqu'un d'autre de fournir la réponse.
Marsh Posté le 16-10-2002 à 09:57:09
El_Gringo a écrit a écrit : ...j'vois pas trop dans quel cas utiliser l'un ou l'autre ! Jusqu'a maintenant j'utilise que des forward... |
en complément à l'explication de benou, avec sendredirect tu forces à réinitialiser une nouvelle requete. Tandis qu'avec forward c'est interne et transparent pour le client
Marsh Posté le 16-10-2002 à 10:00:50
c'est tellement transparent que l'url affichée dans le browser ne change pas alors que l'ors d'un redirect, l'url du browser est modifiée et affiche la nouvelle url.
Marsh Posté le 16-10-2002 à 10:05:41
benou a écrit a écrit : c'est tellement transparent que l'url affichée dans le browser ne change pas alors que l'ors d'un redirect, l'url du browser est modifiée et affiche la nouvelle url. |
En fait, un sendRedirect, c carrément plus long (comme dit benou). C ce genre de truc qui est fait quand on voit s'afficher sur un site : "une redirection va être faite" ou un truc dans l'esprit.
Mais je comprend toujours pas dans quel cas concret utiliser un sendRequest plutot qu'un forward.
Marsh Posté le 16-10-2002 à 10:08:56
El_Gringo a écrit a écrit : Mais je comprend toujours pas dans quel cas concret utiliser un sendRequest plutot qu'un forward. |
Ben déja quand le truc vers la ou tu rediriges n'est pas sur le même serveur, t'as pas le choix.
Marsh Posté le 16-10-2002 à 10:25:06
lorill a écrit a écrit : Ben déja quand le truc vers la ou tu rediriges n'est pas sur le même serveur, t'as pas le choix. |
Haaaaa, ok !
Mais quand on reste sur le même serveur, on fera toujours des forward alors.
Merci
ps : lorill, je suis pas un boulet, ça serait pas plus mal que tu me changes cette affreuse signature que tu as là !
Marsh Posté le 16-10-2002 à 10:28:37
El_Gringo a écrit a écrit : ps : lorill, je suis pas un boulet, ça serait pas plus mal que tu me changes cette affreuse signature que tu as là ! |
Bon, si vraiment ca t'embete... dommage, j'aimais bien moi. Fin bon, un boulay non volontaire, c'est pas drôle. Donc voila !
Marsh Posté le 16-10-2002 à 10:32:22
El_Gringo a écrit a écrit : Haaaaa, ok ! Mais quand on reste sur le même serveur, on fera toujours des forward alors. |
mais enfin pas forcément. Pq tu t'entêtes comme ca
Et puis il y a des moments (au niveau runtime) où tu ne sais absolument pas quelle est l'url (elle peut etre dans un fichier de config externe et peut etre changée par l'admin). Au départ ca sera toujours au niveau du meme serveur puis pour une raison X ou Y on va changer l'url. C'est bete de devoir changer le code de la servet et redéployer pour ca. Donc non on ne fera pas toujousr un forward.
Y a un cas pour tout.
Marsh Posté le 16-10-2002 à 10:54:53
lorill a écrit a écrit : Bon, si vraiment ca t'embete... dommage, j'aimais bien moi. Fin bon, un boulay non volontaire, c'est pas drôle. Donc voila ! |
Ben, les brunocremer, rastacana, et compagnie ont un peu sali l'image que j'avait du boulet ! Me retrouver au même rang qu'eux, c même pas imaginable !
Marsh Posté le 16-10-2002 à 10:55:21
DarkLord a écrit a écrit : mais enfin pas forcément. Pq tu t'entêtes comme ca Et puis il y a des moments (au niveau runtime) où tu ne sais absolument pas quelle est l'url (elle peut etre dans un fichier de config externe et peut etre changée par l'admin). Au départ ca sera toujours au niveau du meme serveur puis pour une raison X ou Y on va changer l'url. C'est bete de devoir changer le code de la servet et redéployer pour ca. Donc non on ne fera pas toujousr un forward. Y a un cas pour tout. |
Ouais, enfin, bref, j'ai compris maintenant !
Merci
Marsh Posté le 16-10-2002 à 11:08:57
regarde ce brave veryfree. C'est l'exemple parfait du bon boolet.
Marsh Posté le 15-10-2002 à 10:50:53
Bon, ben la je comprends pas trop :
java.lang.IllegalStateException
at org.apache.catalina.connector.HttpResponseFacade.sendRedirect(HttpResponseFacade.java:173)
Qu'est ce qui peut causer ce genre d'erreur ? a priori si y'avait deja du texte envoyé au client je comprendrais, mais ca semble pas être mon cas...