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

  FORUM HardWare.fr
  Programmation
  Java

  Probleme de forward dans une servlet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de forward dans une servlet

n°654426
Mazda3
Posté le 25-02-2004 à 12:30:56  profilanswer
 

Voilà j'ai fais une servlet avec une forward.
ça fonctionne mais ça me sort une erreur en sortie de Tomcat :
 

Citation :

StandardWrapperValve[jsp]: "Servlet.service()" pour la servlet jsp a généré une exception
org.apache.jasper.JasperException: Stream closed
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
 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)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
 at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
 at java.lang.Thread.run(Thread.java:536)
----- Root Cause -----
java.io.IOException: Stream closed
 at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:239)
 at org.apache.jasper.runtime.JspWriterImpl.clearBuffer(JspWriterImpl.java:194)
 at org.apache.jsp.index_jsp._jspService(index_jsp.java:104)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
 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)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
 at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
 at java.lang.Thread.run(Thread.java:536)


 
Voici le code où je fais ma redirection ;
 

Citation :

 if ((resultat.equals("accesdenied" ))||(resultat.equals("finsession" ))){
   RequestDispatcher rd = this.getServletContext().getRequestDispatcher(url);
   rd.forward(request,response);
  }


Message édité par Mazda3 le 25-02-2004 à 14:21:21
mood
Publicité
Posté le 25-02-2004 à 12:30:56  profilanswer
 

n°654444
the real m​oins moins
Posté le 25-02-2004 à 12:48:10  profilanswer
 

alors déjà c'est pas une redirection mais un forward :o
 
ensuite, comme te dis l'exception, ton outputstream etait fermé.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654503
Mazda3
Posté le 25-02-2004 à 13:57:43  profilanswer
 

the real moins moins a écrit :

alors déjà c'est pas une redirection mais un forward :o
 
ensuite, comme te dis l'exception, ton outputstream etait fermé.


 
forward et redirection, ce n'est pas pareil ?
 
...
 
Ah ça y est je crois voir la difference :
le forward donne la main à une autre servlet alors que la redirection, redirige la page.
 
Mais dans aucun moment dans mon code je ne ferme mon outpustream.
 
Au debut de la servlet je fais ceci:  
 
PrintWriter out = response.getWriter();
 
et après j'y touche plus

n°654517
Mazda3
Posté le 25-02-2004 à 14:04:11  profilanswer
 

Peut vient-il du fait que cette servlet je l'"include" dans ma jsp ?
 
<jsp:include page="/servlet/maServlet"/>
 
Et que ça ferme mon outPutStream

n°654523
the real m​oins moins
Posté le 25-02-2004 à 14:06:53  profilanswer
 

tu inclus une servlet dans un jsp [:autobot]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654525
the real m​oins moins
Posté le 25-02-2004 à 14:07:34  profilanswer
 

je sais pas, j'ai jamais fait ça, et je le ferai jamais. cela dit ça devrait marcher, mais ptet qu'en effet il fait des cochonneries avec le writer...
 
benou?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654526
benou
Posté le 25-02-2004 à 14:07:53  profilanswer
 

mazda3 a écrit :

Peut vient-il du fait que cette servlet je l'"include" dans ma jsp ?
 
<jsp:include page="/servlet/maServlet"/>
 
Et que ça ferme mon outPutStream


attend, tu ne dois pas faire de include si c'est pour forwarder la requête après, ca n'a pas de sens ...
 
L'erreur doit venir de là, mais j'aurais plutot vu un IllegalStateException ... à moins que tu fasse le include après le forward [:gratgrat]
 
 
Si tu fais un forward il ne faut pas que tu écrives dans la réponse avant ...
edit : ni après d'ailleur ...


Message édité par benou le 25-02-2004 à 14:11:11

---------------
ma vie, mon oeuvre - HomePlayer
n°654532
Mazda3
Posté le 25-02-2004 à 14:19:12  profilanswer
 

Ok donc ça doit venir de là.
 
Je ne sais pas si cela soit propre "codement parlant".
 
Mais comment faire ?
 
J'ai une servlet qui teste (au début de la jsp) si l'utilisateur connecté a droit de regarder cette page, si c'est pas le cas il le renvoi sur une page comme quoi il n'a pas le droit.
 
Vous avez une méthode plus simple ?


Message édité par Mazda3 le 25-02-2004 à 14:19:47
n°654536
Mazda3
Posté le 25-02-2004 à 14:22:29  profilanswer
 

Et quand je le renvoi avec un response.sendRedirect("accesrefuse.jsp" ), il ne fait pas la redirection

n°654542
benou
Posté le 25-02-2004 à 14:26:43  profilanswer
 

utilise un filtre pour faire les vérification qui doivent se faire en amont
 
http://java.sun.com/products/servl [...] ilter.html
 
 
http://java.sun.com/products/servlet/Filters.html


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 25-02-2004 à 14:26:43  profilanswer
 

n°654544
Mazda3
Posté le 25-02-2004 à 14:27:45  profilanswer
 

benou a écrit :

utilise un filtre pour faire les vérification qui doivent se faire en amont
 
http://java.sun.com/products/servl [...] ilter.html
 
 
http://java.sun.com/products/servlet/Filters.html
 


 
Ok je regarde ça

n°654555
the real m​oins moins
Posté le 25-02-2004 à 14:34:09  profilanswer
 

sinon perso j'avais une taglib qui le faisait dans une page pour afficher conditionnelement certaines infos :whistle:
(genre <if user has permission>blablabla</if...> )
benou, si t'as une autre technique pour faire ça je suis preneur


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654607
benou
Posté le 25-02-2004 à 15:17:09  profilanswer
 

nop j'ai pas.
 
La meilleur méthode reste le filtre selon moi. ou à la rigueur un module d'autorisation appelée au sein des servlets, mais je trouve qu'une fois qu'on est dans la jsp "finale" c'est plus le moment de se dire "ha ben non, tiens, j'ai pas le droit d'être là  :whistle:  zou, redirect !"
 
Si t'as pas le droit d'accéder à la jsp, faut même pas arriver dessus ...


Message édité par benou le 25-02-2004 à 15:17:28

---------------
ma vie, mon oeuvre - HomePlayer
n°654613
the real m​oins moins
Posté le 25-02-2004 à 15:27:04  profilanswer
 

oui oui mais ce dont je parle ça serait une jsp (un "ecran" ) ou certaines infos ne seraient visibles que par l'admin par exemple
(exemple concret les boutons "delete post", "ban user", ... d'un forum; tu vas pas faire deux jsp identiques avec seulement ça en plus dans un cas)
 
moi je vois deux solutions: avoir un tag qui va verifier ça au moment de l'affichage, ou bien la servlet qui sette un booleen ou autre dans la request, booleen utilisé par la jsp pour afficher ou non, donc bon je prefere le tag à ce moment là.. autre possibilité?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654619
benou
Posté le 25-02-2004 à 15:46:17  profilanswer
 

dans ce genre de cas, un tag c'est bien ...
 
Mais notre amis c'est pas vraiment ca son besoin puisque dans le cas où il est pas autorisé il fait une redirection alors que toi, si j'ai bien compris, tout le monde aurait droit d'accès mais avec plus ou moins d'options affichées


---------------
ma vie, mon oeuvre - HomePlayer
n°654622
the real m​oins moins
Posté le 25-02-2004 à 15:48:09  profilanswer
 

tout à fait, je ne parlais que pour moi :D
 
(et bien sur j'ai un filtre en amont pour l'accès global aux servlets/actions/...)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654623
R3g
fonctionnaire certifié ITIL
Posté le 25-02-2004 à 15:49:37  profilanswer
 

the real moins moins a écrit :

oui oui mais ce dont je parle ça serait une jsp (un "ecran" ) ou certaines infos ne seraient visibles que par l'admin par exemple
(exemple concret les boutons "delete post", "ban user", ... d'un forum; tu vas pas faire deux jsp identiques avec seulement ça en plus dans un cas)
 
moi je vois deux solutions: avoir un tag qui va verifier ça au moment de l'affichage, ou bien la servlet qui sette un booleen ou autre dans la request, booleen utilisé par la jsp pour afficher ou non, donc bon je prefere le tag à ce moment là.. autre possibilité?

Tiens moi dans ce cas-là j'aurais préféré la deuxième solution ; la jsp elle affiche ce qu'on lui dit d'afficher, à mon sens c'est pas à elle de décider ce qui doit être affiché ou non.... enfin bon ça revient au même à la fin, hein.


---------------
Au royaume des sourds, les borgnes sont sourds.
n°654630
the real m​oins moins
Posté le 25-02-2004 à 15:53:15  profilanswer
 

oui d'accord mais ça revient au meme: le contenu est qd meme dans la jsp: la seule difference c'est la manière dont la décision est prise. en dans la 1ere solution, c'est encapsulé dans un tag jsp. ça permet aussi d'alléger la logique dans la servlet. (et de ne modifier que la jsp si on veut changer ce comportement - mais là je suis moins sur qu'il s'agisse d'un avantage)


Message édité par the real moins moins le 25-02-2004 à 15:53:39

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654633
R3g
fonctionnaire certifié ITIL
Posté le 25-02-2004 à 15:55:13  profilanswer
 

the real moins moins a écrit :

oui d'accord mais ça revient au meme: le contenu est qd meme dans la jsp: la seule difference c'est la manière dont la décision est prise. en dans la 1ere solution, c'est encapsulé dans un tag jsp. ça permet aussi d'alléger la logique dans la servlet. (et de ne modifier que la jsp si on veut changer ce comportement - mais là je suis moins sur qu'il s'agisse d'un avantage)

Ouais t'as sans doute raison.. j'ai pas trop l'habitude de travailler avec des tags (enfin j'ai pas trop l'habitude de travailler avec des jsp tout court), donc j'ai pas le réflexe, mais c'est sans doute une solution plus élégante.


---------------
Au royaume des sourds, les borgnes sont sourds.
n°654658
the real m​oins moins
Posté le 25-02-2004 à 16:03:04  profilanswer
 

à vrai dire, je ne sais pas. il y a encore un tas de gens qui conchie les jsp et prefere des template engines style velocity, mais je me demande comment ils font ce genre de choses...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654751
Mazda3
Posté le 25-02-2004 à 16:21:44  profilanswer
 

Tiens vous savez comment faire pour qu'on ne puisse modifier les jsp ?
 
Avec des droits, mot de passe, ou autres ...
Il y a que le serveur qui peut les executer.


Message édité par Mazda3 le 25-02-2004 à 16:22:40
n°654777
benou
Posté le 25-02-2004 à 16:26:21  profilanswer
 

ca c'est un problème de droit d'accès aux fichiers ... t'as qu'à autoriser la modif des jsp que par un utilisateur ...
 
si t'es sous windows il te faut une partition NTFS ...


---------------
ma vie, mon oeuvre - HomePlayer
n°654803
the real m​oins moins
Posté le 25-02-2004 à 16:37:27  profilanswer
 

à vrai dire aucun user ne devrait pouvoir les modifier, et total safety: seul tomcat ou autre pour les lire :D
 


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654811
Mazda3
Posté le 25-02-2004 à 16:38:47  profilanswer
 

Ok ! Merci !

n°654830
Mazda3
Posté le 25-02-2004 à 16:43:41  profilanswer
 

the real moins moins a écrit :

à vrai dire aucun user ne devrait pouvoir les modifier, et total safety: seul tomcat ou autre pour les lire :D
 
 


 
Autre question et après je vous laisse tranquille ...  :)  
 
Peut-on mettre ces droits automatiquement sur les jsp lors du deploiement avec un .war ?


Message édité par Mazda3 le 25-02-2004 à 16:44:02
n°654849
benou
Posté le 25-02-2004 à 16:50:19  profilanswer
 

non c'est pas possible :/


---------------
ma vie, mon oeuvre - HomePlayer
n°654921
the real m​oins moins
Posté le 25-02-2004 à 17:43:39  profilanswer
 

c'est os-dependent
 
par contre tu peux configurer ton systeme pour que webapps ait des sticky bits machins qui feront que tout fichier créé dedans aura tel ou tel droits


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°654923
the real m​oins moins
Posté le 25-02-2004 à 17:44:32  profilanswer
 

tfaçons, je vois pas pq qqun aurait le droit d'aller là dedans autrement qu'en lecture donc bon.. tu fous le rep tomcat ou webapps en rwxrx-rx- et s'il appartient à l'user tomcat c bon


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le   profilanswer
 


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

  Probleme de forward dans une servlet

 

Sujets relatifs
[PHP] Probleme d'header :/Gros mystère inside - Problême avec sessions et plusieurs fenêtres
Probleme d'interpretation d'un message d'Erreur de g++Petit probleme PHP/HTML
JSP : problème avec le mécanisme de gestion des erreursProblème modification de données ADO
[SQL] Problème de jointure[c++] probleme avec le mot clé static et les threads sous windows
Problème de formatage en voulant passer de windows 98 à XP[Jsp/Servlet] Problème lors du premier forward depuis ma servlet
Plus de sujets relatifs à : Probleme de forward dans une servlet


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