Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2951 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Tomcat] exception dans une redirection

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Tomcat] exception dans une redirection

n°228077
lorill
Posté le 15-10-2002 à 10:50:53  profilanswer
 

Bon, ben la je comprends pas trop :

Citation :


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...

mood
Publicité
Posté le 15-10-2002 à 10:50:53  profilanswer
 

n°228081
darklord
You're welcome
Posté le 15-10-2002 à 11:03:49  profilanswer
 

t'as du code et ce que crache les logs?


---------------
Just because you feel good does not make you right
n°228083
lorill
Posté le 15-10-2002 à 11:09:19  profilanswer
 

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 :


2002-10-15 11:07:58 StandardWrapperValve[jwma]: Servlet.service() for servlet jwma threw exception
java.lang.IllegalStateException
 at org.apache.catalina.connector.HttpResponseFacade.sendRedirect(HttpResponseFacade.java:173)
 at jwma.webmail.JwmaSession.redirect(JwmaSession.java:231)
 at jwma.webmail.JwmaController.service(JwmaController.java:197)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

n°228085
darklord
You're welcome
Posté le 15-10-2002 à 11:15:14  profilanswer
 

déjà c'est pas request, ensuite c'est pas redirect. La méthode que tu utilises est probablement sendRedirect de HttpServletResponse
 

Citation :


Sends a temporary redirect response to the client using the specified redirect location URL. This method can accept relative URLs; the servlet container must convert the relative URL to an absolute URL before sending the response to the client. If the location is relative without a leading '/' the container interprets it as relative to the current request URI. If the location is relative with a leading '/' the container interprets it as relative to the servlet container root.  
If the response has already been committed, this method throws an IllegalStateException. After using this method, the response should be considered to be committed and should not be written to.


 
ca aide?


---------------
Just because you feel good does not make you right
n°228087
lorill
Posté le 15-10-2002 à 11:19:44  profilanswer
 

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 :


If the response has already been committed, this method throws an IllegalStateException. After using this method, the response should be considered to be committed and should not be written to.
 
ca aide?


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.

n°228088
darklord
You're welcome
Posté le 15-10-2002 à 11:26:17  profilanswer
 

sinon balance le corps de ton doGet/doPost pour voir ...


---------------
Just because you feel good does not make you right
n°228090
lorill
Posté le 15-10-2002 à 11:27:54  profilanswer
 

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 :D
mais alors vraiment pas. Parfois j'ai un peu honte  :o

n°228094
darklord
You're welcome
Posté le 15-10-2002 à 11:29:09  profilanswer
 

comme tu veux ..
 
 :hello:


---------------
Just because you feel good does not make you right
n°228492
--greg--
Posté le 16-10-2002 à 01:34:09  profilanswer
 

lorill a écrit a écrit :

 
euh, nan, je t'assure que tu ne veux pas le voir :D
mais alors vraiment pas. Parfois j'ai un peu honte  :o  



quoted
ça peut tjs servir :o


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°228513
benou
Posté le 16-10-2002 à 09:08:04  profilanswer
 

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 :
  1. if (testeDErreur) {
  2.    response.sendRedirect("/error" );
  3. }
  4. out.println("ok" );


 
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 :
  1. if (testeDErreur) {
  2.    response.sendRedirect("/error" );
  3.    return;
  4. }
  5. out.println("ok" );


Message édité par benou le 16-10-2002 à 09:28:48
mood
Publicité
Posté le 16-10-2002 à 09:08:04  profilanswer
 

n°228514
lorill
Posté le 16-10-2002 à 09:13:42  profilanswer
 

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.

n°228516
El_gringo
Posté le 16-10-2002 à 09:14:22  profilanswer
 

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 :

Code :
  1. if (testeDErreur) {
  2.    response.sendRedirect("/error" );
  3. }
  4. out.println("ok" );


 
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 :
  1. if (testeDErreur) {
  2.    response.sendRedirect("/error" );
  3.    return;
  4. }
  5. out.println("ok" );


 




 
...comme après un forward, c'est ça ?

n°228518
benou
Posté le 16-10-2002 à 09:28:34  profilanswer
 

El_Gringo a écrit a écrit :

 
...comme après un forward, c'est ça ?




ouep !

n°228524
El_gringo
Posté le 16-10-2002 à 09:47:26  profilanswer
 

D'ailleur c quoi la différence entre sendRedirect et un forward ?

n°228525
lorill
Posté le 16-10-2002 à 09:48:31  profilanswer
 

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.

n°228526
darklord
You're welcome
Posté le 16-10-2002 à 09:48:58  profilanswer
 

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 ...


---------------
Just because you feel good does not make you right
n°228533
El_gringo
Posté le 16-10-2002 à 09:53:00  profilanswer
 

...j'vois pas trop dans quel cas utiliser l'un ou l'autre !
Jusqu'a maintenant j'utilise que des forward...


Message édité par El_gringo le 16-10-2002 à 09:53:32
n°228534
benou
Posté le 16-10-2002 à 09:54:51  profilanswer
 

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)

n°228535
benou
Posté le 16-10-2002 à 09:57:00  profilanswer
 

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.

n°228536
darklord
You're welcome
Posté le 16-10-2002 à 09:57:09  profilanswer
 

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


---------------
Just because you feel good does not make you right
n°228539
benou
Posté le 16-10-2002 à 10:00:50  profilanswer
 

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.

n°228544
El_gringo
Posté le 16-10-2002 à 10:05:41  profilanswer
 

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.

n°228545
lorill
Posté le 16-10-2002 à 10:08:56  profilanswer
 

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.

n°228561
El_gringo
Posté le 16-10-2002 à 10:25:06  profilanswer
 

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à ! :D

n°228563
lorill
Posté le 16-10-2002 à 10:28:37  profilanswer
 

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à ! :D  




 
Bon, si vraiment ca t'embete... dommage, j'aimais bien moi. Fin bon, un boulay non volontaire, c'est pas drôle. Donc voila !
 :hello:

n°228565
darklord
You're welcome
Posté le 16-10-2002 à 10:32:22  profilanswer
 

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.


---------------
Just because you feel good does not make you right
n°228582
El_gringo
Posté le 16-10-2002 à 10:54:53  profilanswer
 

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 !
 :hello:  




 
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 !

n°228583
El_gringo
Posté le 16-10-2002 à 10:55:21  profilanswer
 

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

n°228586
benou
Posté le 16-10-2002 à 11:08:57  profilanswer
 

regarde ce brave veryfree. C'est l'exemple parfait du bon boolet.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Tomcat] exception dans une redirection

 

Sujets relatifs
Tomcat 4 - Problème de sur-persistance d'une page !Tomcat : préciser un login et un mot de passe
[JAVA] Examples JSP de Tomcat ne fonctionnent pas ??[Tomcat] y'a moyen de sortir le traitement des jsp du bloc try catch ?
[java / tomcat] Rechargement de contextemoi po comprendre.... pb redirection comande DOS....
Comment faire une REDIRECTION auto au bout de x secondes ? [solutioné][Tomcat] compiler les JSP au démarrage
Utiliser les classes contenues dans un .zip dans une servlet (Tomcat 4Installation TomCat 4 avec apache sur Windaube 2000
Plus de sujets relatifs à : [Tomcat] exception dans une redirection


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR