IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

IllegalStateException sur redirection vers ErrorPage


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut IllegalStateException sur redirection vers ErrorPage
    Bonjour,

    J'ai configuré une error page dans mon web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <error-page>
      <exception-type>java.lang.Throwable</exception-type>
      <location>/html/error/errorpage.jsp</location>
    </error-page>
    Pour tester j'ai mis ceci dans une jsp:

    Ce qui lance une ArithmeticException

    La redirection a l'air de fonctionner sauf que dans le log j'ai cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SEVERE: Exception Processing ErrorPage[exceptionType=java.lang.Throwable, location=/html/error/errorpage.jsp]
    java.lang.IllegalStateException
    	at org.apache.coyote.Response.reset(Response.java:297)
    	at org.apache.catalina.connector.Response.reset(Response.java:658)
    	at org.apache.catalina.connector.Response.reset(Response.java:925)
    	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:417)
    	at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:271)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    Pour info, le serveur est tomcat 6 et j'utilise également struts.
    J'ai cherché un peu sur le net mais je n'ai rien trouvé qui pourrait expliquer cette erreur.

    Quelqu'un aurait une idée de la cause? (et tant qu'à faire, de la solution ).

    Merci d'avance.
    Développeur écolo, je suis pour le développement durable.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    et je suppose que vous n'avez rien dans le browser

    La méthode reset renvoie un illegalstatexception si on l'appelle alors qu'une partie de la réponse à déjà été envoyée à l'utilisateur. C'est inhérant au protocole http, on ne peux pas annuler ce qu'on a déjà envoyé. Hors il faut que rien n'aie été envoyé pour pouvoir faire une redirection ou afficher une autre page (ici page d'erreur). Dans votre cas, donc, soit la jsp est trop grosse et il y a trop de "texte" avant l'erreur => réponse déjà partiellement envoyée, c'est foutu (augmenter éventuellement le buffer de la page).

    Soit vous n'avez pas de tampon dans la réponse qui prendrait en charge la possibilité de reset. Dans ce cas, ajouter au début de la jsp, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@page buffer="150kb" autoFlush="true" %>

  3. #3
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Merci pour la réponse (tu peux me tutoyer).

    et je suppose que vous n'avez rien dans le browser
    Et bien si, j'ai une partie de la jsp de départ qui s'affiche, jusqu'à l'expression qui lance l'exception j'imagine.

    J'ai pu déterminer l'origine du problème.
    Dans la jsp de départ, j'inclus un custom Tag qui sert à afficher le menu.
    Quand je remplace l'appel à ce tag par mon EL, la page d'erreur s'affiche bien.

    J'en déduis donc que c'est le tag qui amène une partie de la jsp à s'afficher avant d'arriver à l'erreur et de bloquer, ce qui explique l'illegal state.

    Malheureusement je ne sais pas comment empêcher cela.
    Développeur écolo, je suis pour le développement durable.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    essayez d'augmenter le buffer, c'est peut être simplement le tag qui génère beaucoup

    sinon, c'est que le tag fait un flush (méchant le tag) et là c'est cuit.

  5. #5
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Merci, ça fonctionne bien quand je mets ceci dans la page de départ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@page buffer="150kb" autoFlush="true" %>
    Problème: je ne me vois pas modifier les centaines de jsp de mon application pour y ajouter cette directive.

    Est-ce qu'il y a un moyen de configurer ça au niveau de l'application?

    (Je peux éventuellement ajouter cette directive dans une page que j'inclus dans toutes mes jsp, mais il y a peut-être une autre solution, dans le web.xml par exemple?)
    Développeur écolo, je suis pour le développement durable.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    rien de standard en tout cas. Je ne suis pas sur que ca marche avec l'inclusion (tout dépend de l'inclusion en fait), parce chaque "rendu jsp" a son propre bufer

    et pour changer de manière globale -> rien de standard prévu (chez tomcat c'est hardcodé dans le code)

    pour modifier toutes les pages, un petit coup de sed pourrait faire le boulot vite fait

  7. #7
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    En effet j'ai cherché sur le net et pour tomcat il n'y a rien de prévu.

    Mais ce n'est pas grave, j'ai testé en ajoutant la directive dans la jsp qui contient le header et qui est donc incluse dans toutes les pages, et ça fonctionne. (c'est une directive include donc aucun soucis, c'est fusionné avant compilation).

    Merci bien en tout cas, tu as sauvé ma journée de boulot
    Développeur écolo, je suis pour le développement durable.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Haywire Voir le message

    Merci bien en tout cas, tu as sauvé ma journée de boulot
    Vu l'heure, c'est déjà trop tard

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection sur bind9 vers serveur windows AD
    Par epc dans le forum Administration système
    Réponses: 0
    Dernier message: 04/12/2012, 18h18
  2. Réponses: 1
    Dernier message: 30/08/2010, 22h52
  3. Réponses: 1
    Dernier message: 22/02/2009, 20h54
  4. onclick sur a href avec redirection vers un autre fichier
    Par taka10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/08/2007, 15h39
  5. Redirection de apache sur :80 vers iis sur :81
    Par lecter dans le forum Apache
    Réponses: 2
    Dernier message: 26/04/2006, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo