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 :

Exception JSP Redirection


Sujet :

Servlets/JSP Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Exception JSP Redirection
    Bonjour,

    J'ai un filtre qui fait des traitement sur la réponse renvoyée en modifiant les urls des liens présents sur la page renvoyé qui sont des liens vers l'exterieur en les redirigenat vers une JSP qui elle même va rediriger vers les memes lien externes.
    Le problème c'est que j'ai une exception au niveau de mon filtre:
    La reqûete est bien redirigée vers la JSP mais c au moment ou le reqête vers la JSP passe par le filtre qu'est générée l'excerption : java.lang.IllegalStateException
    at org.apache.coyote.tomcat5.CoyoteResponseFacade.resetBuffer(CoyoteResponseFacade.java:247)
    at javax.servlet.ServletResponseWrapper.resetBuffer(ServletResponseWrapper.java:191)



    Code du filtre :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
    HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
     
    chain.doFilter(request, wrapper);
                ResponseContent content = wrapper.getContent();
                content.getOutputStream();
     
                PrintWriter pws = new PrintWriter(wrapper.getOutputStream());
                String chaine = new String(content.getContent());
     
                String chaine2 = chaine.replaceAll("href=\"(http://[^\"]+)\"", "href=\"/application/redirect.jsp?url=$1\"");
    try {
                    wrapper.resetBuffer();
                } catch (Exception e) {
                    // TODO: handle exception
                    logger_.debug("erreur reset buffer",e);
                }
     
     
     
                    pws.write(chaine2);
                    pws.flush();
                    pws.close();
    }

    Code JSP :
    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
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Example</title>
    </head>
    <body>
     
    <%
     
    String url = request.getParameter("url");
    response.sendRedirect(url);%>
    </body>
    </html>

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    bonjour,

    l'erreur vient du fait qu'on ne peut pas faire appel à sendRedirect alors que la réponse à été commité, par example le code suivant lève la même exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void doGet(HttpServletRequest req, HttpServletResponse res) 
    {
    PrintWriter pw = res.getWriter();
    pw.println("<html><body>bonjour tout le monde</body></html>");
    pw.flush();//envoie de la réponse
    res.sendRedirect("http://www.developpez.com");
    }
    et c'est ce qui t'arrive car la même reponse est envoyée au .jsp passant par ton filtre sauf que dans ta methode doFilter (pws.flush()) tu as déjà envoyé la reponse.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci pour votre explication claire,
    Je vois le problème, j'ai cherché une solution en vain.
    auriez vous une idée?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 185
    Points : 109
    Points
    109
    Par défaut
    bonjour,

    supposons que la requête pour ta jsp passe par 2 filtres (filtre1,filtre2):

    le conteneur appelle filtre1 et execute sa methode doFiltre(r,s,c) jusqu'a c.doFiltre ensuite il 'empile' filtre2 et fait la même chose ensuite il 'empile' ta servlet_jsp et execute la méthode service() et la 'depile', le conteneur retourne le controle au filtre2 et finit sa methode doFiltre() et la 'depile' ensuite fait la même chose au filtre1 et ce n'est qu'au ce moment là qu'il envoie la réponce au client (browser).

    autre chose il n'est pas obligatoire de faire appel dans ta méthode doFilter(r,s,c) à la méthode c.dofilter(r,s), donc tu peux faire tout le traitement (response.sendRedirect()) dans le filtre ...

    ce qui m'intrigue un peu c'est la methode getContent(), je ne pense pas qu'elle existe!

    A+

Discussions similaires

  1. [JSP] Redirection automatique
    Par Crazyblinkgirl dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 08/08/2011, 10h24
  2. [jsp] redirection avec une variable
    Par louline dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 11/06/2007, 15h51
  3. [JSP] Redirection jsp
    Par DanZzz dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 22/03/2006, 10h38
  4. [ SERVLET ] [JSP ] Redirection servlet vers JSP
    Par Enfa dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 23/02/2005, 14h55
  5. [ Débutant ][ JSP ]Redirection d'URL
    Par leminipouce dans le forum Servlets/JSP
    Réponses: 18
    Dernier message: 23/11/2004, 11h32

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