2010-01-15 5 views
4

Je crée un projet avec des entretoises et j'ai un problème avec Jasper IReports. Je veux exporter quelques informations dans un fichier pdf et je continue d'obtenir le java.lang.IllegalStateException: getOutputStream() a déjà été appelé ... Exception due à l'ouverture d'un ServletOutputStream dans mon code lorsque la page ouvre déjà un PrintWriter.Utilisation de PrintWriter et OutputStream

Le code est dans le modèle (il est donc pas dans le jsp, il est dans un fichier java), comme suit:

public void handle(HttpServletResponse res, Connection connection, String path)throws Exception{ 
    ServletOutputStream out = null; 
    try { 

     JasperDesign jasperDesign = JRXmlLoader.load(path); 
     JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
     byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, null, connection); 
     res.setContentType("application/pdf"); 
     res.setContentLength(bytes.length); 
     out = res.getOutputStream(); 
     out.write(bytes, 0, bytes.length); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     out.flush(); 
     out.close(); 
    } 

J'ai vérifié la connexion, le chemin et le HttpServletResponse et sont tout fonctionne bien. Je suis très novice avec Jasper Reports ainsi que pour coder des choses en PDF, ce qui fait que je peux dire que j'ai une idée minimale de ce que je fais ici et que, évidemment, mon code est copié/collé de quelque part à travers le net.

J'ai essayé d'utiliser PrintWriter au lieu de OutputStream, en transformant des octets en chaîne et en utilisant la méthode PrintWriter.append (String) (allShought n'est pas String is CharSequence), mais il n'en extrait pas les données dans le PDF.

J'ai également essayé d'obtenir le PrintWriter, fermez-le pour ouvrir le OutputStream (n'a pas fonctionné) ou le vider (aucun).

Toute aide avec une solution pour utiliser n'importe quelle sortie qui pourrait montrer les données dans un pdf serait grande. Merci beaucoup!

+0

qui ouvre le PrintWriter? – Bozho

+0

Le fichier JSP tente d'ouvrir PrintWriter au démarrage. Ainsi, lorsque j'envoie le contrôle au fichier jsp via ActionMapping.findforward, le JSP ouvre le PrintWriter et commence à afficher le JSP. J'ai résolu cela en ne allant nulle part avec mon findforward. Donc, il n'y a pas de fichier JSP à charger (il n'y a rien à charger) et le code PDF (via OutputStream) va à la page sans charger un fichier jsp et sans cela, sans charger PrintWriter. – Random

Répondre

3

Serait utile de voir la trace de la pile.

Vous pouvez essayer d'exécuter une vérification de santé mentale en premier lieu: Modifiez ce code pour écrire simplement une chaîne statique (bonjour world) dans le ServletOutputStream et définissez le type de contenu sur text/html. Comme cela devrait fonctionner correctement:

public void handle(HttpServletResponse res, Connection connection, String path)throws Exception{ 
ServletOutputStream out = null; 
try { 
    byte[] bytes = "hello world".getBytes(); 
    res.setContentType("text/html"); 
    res.setContentLength(bytes.length); 
    out = res.getOutputStream(); 
    out.write(bytes, 0, bytes.length); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    out.flush(); 
    out.close(); 
} 

HTH

+0

En effet, ce code fonctionne parfaitement. Je ne comprends pas, car je pensais que vous ne pouviez pas avoir un OutputStream et un PrintWriter ouverts tous les deux. Est-ce qu'en définissant le type de contenu sur "text/html", il remplace en quelque sorte le PrintWriter? – Random

+0

Non, je pense que l'on peut être ouvert: 'http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletResponse.html#getOutputStream()' Avez-vous essayé d'appeler getWriter() après avoir écrit dans le flux de sortie? Si vous êtes alors c'est pourquoi vous obtenez l'exception illegalstate. – simonlord

+0

Je pense que je comprends maintenant, Comme le outputStream écrit le pdf, le programme finit toujours d'aller à l'actionmapping.findforward (à mon jsp). Et le jsp écrit avec le PrintWriter. Je pense qu'il y a le problème et pourquoi maintenant je peux voir mon pdf et faire lever l'exception de toute façon. Je pourrais essayer de ne pas aller n'importe où avec l'actionmapping ainsi il n'y a aucune exception pour employer PrintWriter. – Random

3

Quelques idées:

  • PrintWriter ne va pas travailler si vous travaillez avec un flux binaire (PDF sont binaires)
  • L'état illégal peut se produire s'il y a un délai d'attente côté client ou une déconnexion. Une trace de paquet du processus vous en dira beaucoup (même si vous ne pouvez pas bien les lire). Regardez WireShark ou ce qui est disponible pour votre plate-forme. Cela vaut la peine d'apprendre au moins un peu sur ce qui se passe au niveau du fil.
  • Assurez-vous que les données que vous récupérez du rapport sont effectivement des fichiers PDF. Écrivez-le dans un fichier et essayez d'ouvrir.
  • Certaines situations nécessitent que vous définissiez l'en-tête http avant d'écrire dans le flux, sinon ils abandonnent lorsque les données commencent à s'afficher. Peut-être nécessaire ici.
+0

Merci! J'ai fait un simple projet Java (pas webapp) et essayé de créer un fichier PDF, mon jrxml semble fonctionner. Je vais chercher ce qui se passe au niveau du fil. Mon rapport est assez court (environ 200 caractères) Je ne pense pas que l'URL devienne trop grande pour cela ... – Random

0

propre réponse:

J'ai mis dans le chemin d'un jrxml qui relie en fait à la base de données et obtient des données réelles sur et suddendly cela a fonctionné, le PDF ouvert dans mozilla, mais l'exception continue à se produire. Je ne sais pas comment je peux lancer et l'exception (j'ai débogué et l'Exception arrive au même endroit) et être capable de voir le PDF. Par conséquent, je ne peux que continuer à chercher ce qui se passe réellement ici. Je répondrai avec tout ce que je trouverai (probablement lundi).

Merci simonlord et Jim Rush pour votre aide! :)

Editer: Au fait, voici la pile (c'est en espagnol, si nécessaire je traduirai tout ce que vous ne comprenez pas): Editez encore: Semble que je n'ai pas copié le '1' dans le 15-Jan-2010 ... pourrait créer une confusion à propos d'une trace de l'insetad du 5 janvier. Corrigée.

15-ene-2010 13:47:03 org.apache.catalina.core.ApplicationDispatcher invoke 
GRAVE: El Servlet.service() para servlet jsp lanzó una excepción 
java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta 
    at org.apache.catalina.connector.Response.getWriter(Response.java:607) 
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:196) 
    at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112) 
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125) 
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118) 
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:171) 
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:116) 
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:76) 
    at org.apache.jsp.pages.inicio2_jsp._jspService(inicio2_jsp.java:300) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497) 
    at org.apache.struts.chain.commands.servlet.PerformForward.handleAsInclude(PerformForward.java:141) 
    at org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:92) 
    at org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54) 
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
    at java.lang.Thread.run(Unknown Source) 
15-ene-2010 13:47:03 org.apache.struts.chain.commands.AbstractExceptionHandler execute 
ADVERTENCIA: Unhandled exception 
org.apache.jasper.JasperException: getOutputStream() ya ha sido llamado para esta respuesta 
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:367) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497) 
    at org.apache.struts.chain.commands.servlet.PerformForward.handleAsInclude(PerformForward.java:141) 
    at org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:92) 
    at org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54) 
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
    at java.lang.Thread.run(Unknown Source) 
15-ene-2010 13:47:03 org.apache.struts.chain.commands.ExceptionCatcher postprocess 
ADVERTENCIA: Exception from exceptionCommand 'servlet-exception' 
org.apache.jasper.JasperException: getOutputStream() ya ha sido llamado para esta respuesta 
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:367) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497) 
    at org.apache.struts.chain.commands.servlet.PerformForward.handleAsInclude(PerformForward.java:141) 
    at org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:92) 
    at org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54) 
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
    at java.lang.Thread.run(Unknown Source) 
15-ene-2010 13:47:03 org.apache.catalina.core.StandardWrapperValve invoke 
GRAVE: Servlet.service() para servlet action lanzó excepción 
java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta 
    at org.apache.catalina.connector.Response.getWriter(Response.java:607) 
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:196) 
    at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112) 
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125) 
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118) 
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:171) 
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:116) 
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:76) 
    at org.apache.jsp.pages.inicio2_jsp._jspService(inicio2_jsp.java:300) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:497) 
    at org.apache.struts.chain.commands.servlet.PerformForward.handleAsInclude(PerformForward.java:141) 
    at org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:92) 
    at org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54) 
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
    at java.lang.Thread.run(Unknown Source) 
1

Comment le code est-il appelé exactement? A en juger par la pile, on dirait que vous exécutez la classe Java avec la méthode handle en utilisant scriptlets dans un fichier JSP (le inicio2.jsp pour être précis). Après que la classe Java a écrit le rapport au OutputStream, le fichier JSP continuerait à sortir le reste du fichier lui-même (y compris les espaces!), Ce qui invoquerait implicitement le getWriter() pour l'écrire dans la réponse. Exactement cela causerait un IllegalStateException que vous faites face maintenant quand le getOutputStream() a déjà été appelé auparavant dans la classe Java.

Il est bon que le code Java ait été placé dans une classe Java, mais cela ne signifie pas que vous pouvez toujours utiliser JSP pour l'invoquer. La JSP ne doit contenir aucune ligne de code Java. JSP lui-même est comme une partie de la technologie de visualisation de la sortie. Pour résoudre tout cela, il suffit d'avoir une classe d'action Struts (ou un HttpServlet) que vous pouvez invoquer par un code HTML <form> ou <a>.

+0

Le code est invoqué dans un fichier Java dans une de mes propres classes qui est appelée dans une Action de mon own et le JSP l'appelle throgh un struct-config-xml comme tout autre MVC utilisant struts. Le problème est plus ou moins résolu (voir les commentaires de simonlord): Le code a tenté d'écrire a.pdf en utilisant OutputStream dans une page tandis qu'à la fin de ce code, il a essayé de rediriger vers inicio2.jsp après avoir écrit le fichier .pdf. Bien sûr, le fichier jsp utilise PrintWriter et il y a le problème. Je l'ai résolu en ne redirigeant pas le code vers n'importe où (dans le findforward). Merci quand même! :) – Random

Questions connexes