java.lang.IllegalStateException: Déjà à l'aide de flux de sortie
windchill GUI sur le côté client du navigateur lorsqu'un utilisateur clique sur un bouton particulier fichier pdf est téléchargé sur son système.J'ai réalisé cela en utilisant le code suivant.
<body>
<%
String pdfname= session.getAttribute("pdfname").toString();
String Pdfpath= session.getAttribute("pdfpath").toString();
File f =new File(Pdfpath);
Boolean flag=false;
if(f.exists())
{
BufferedInputStream filein = null;
BufferedOutputStream out2=null;
try {
File file = new File(Pdfpath);//specify the file path
byte b[] = new byte[1048576];
int len = 0;
filein = new BufferedInputStream(new FileInputStream(file));
out2=new BufferedOutputStream(response.getOutputStream());
response.setHeader("Content-Length", ""+file.length());
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment;filename="+pdfname);
response.setHeader("Content-Transfer-Encoding", "binary");
while ((len = filein.read(b)) > 0) {
out2.write(b, 0, len);
out.println("Your Pdf Document Is Generated Please close it");
}
filein.close();
out2.flush();
out2.close();
}
catch(Exception e)
{
out.println(e);
}
}else{
String error ="File Not Found Or File Has Bean Deleted Already";
request.setAttribute("error", error);
RequestDispatcher s = request.getRequestDispatcher("NoFile.jsp");
s.forward(request, response);
}
%>
</body>
Ce code fonctionne très bien et le fichier est téléchargé, mais après qu'Il déclenche une exception.Ce qui suit est ma méthode de log du serveur
ERROR : org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/Windchill].[jsp] - Servlet.service() for servlet jsp threw exception
Thu 3/28/13 12:29:07: TP-Processor7: java.lang.IllegalStateException: Already using output stream
Thu 3/28/13 12:29:07: TP-Processor7: at wt.servlet.CompressionFilter$GzippingResponse.getWriter(CompressionFilter.java:860)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:173)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jasper.runtime.JspWriterImpl.close(JspWriterImpl.java:187)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jsp.netmarkets.jsp.gt.get_jsp._jspService(get_jsp.java:105)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
Thu 3/28/13 12:29:07: TP-Processor7: at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
Thu 3/28/13 12:29:07: TP-Processor7: at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
Thu 3/28/13 12:29:07: TP-Processor7: at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
Thu 3/28/13 12:29:07: TP-Processor7: ......
......
Il y a beaucoup de postes disponibles à google au sujet de cette exception, mais je ne peux pas effacer mon erreur. J'ai aussi essayé d'ajouter cette servlet au lieu de jsp. Qui démontre la même exception.De cette façon correcte pour le téléchargement d'un fichier ou je suis dans le mauvais sens? J'ai besoin d'aide
Grâce
OriginalL'auteur Vignesh Vino | 2013-03-28
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser les deux
getServletOutputStream()
etgetWriter()
en même réponse.Venir à votre problème. Évitez d'écrire des scriptlets en JSP. Ce que vous faites dans la JSP , de l'appliquer en Servlet.
Vous appelez
response.getOutputStream();
dans la JSP qui est illégal. Vous devez utiliserServletResponse.getOutputStream()
ouServletResponse.getWriter()
.Depuis JSP utilisation ServletResponse.getWriter() par défaut. Vous devriez écrire à ServletResponse.getWriter() à la place ServletResponse.getOutputStream()
C'est ce que Java Doc a dit :
Cannot make a static reference to the non-static method getWriter() from the type ServletResponse
Aider à résoudre ceOriginalL'auteur Ramesh PVK
Semble que l'exception est générée à partir de cette ligne.
Dans le cas où votre code pour envoyer le fichier PDF de l'Application échoue en cours d'écriture, alors il sera jeté et d'exception et tout en essayant d'imprimer l'exception avec la ligne ci-dessus la outputputstream est déjà utilisé.
Ne pas mélanger de l'INTERFACE utilisateur et la Logique Métier dans les JSP. Utiliser une Servlet pour faire ce travail.
OriginalL'auteur shazin
Vous avez
</body>
après votre scriptlet. Il va imprimer quelque chose à la réponse outputstream, mais vous avez déjà fermé que celle d'avant.Quel sens faut-il faire pour inclure
<body>
balises dans votre réponse lors de ce que vous voulez faire est de diffuser un fichier PDF de retour de la client?Pourquoi êtes-vous, y compris une
<body>
et</body>
à tous? Vous êtes en streaming PDF, n'est-ce pas?Oui..Depuis que je suis en utilisant jsp je pensais que les scriptlets avoir à ajouter dans le corps de la balise
Si la seule chose que votre JSP n'est la diffusion d'un document PDF, vous n'avez pas à entourer le scriptlet avec
<body>
et</body>
.OriginalL'auteur mthmulders