java.lang.IllegalStateException: Bereits mit output-stream
windchill-GUI auf client-Seite browser, wenn ein Benutzer klickt auf eine Schaltfläche pdf-Datei sollte heruntergeladen, auf seinem system.Ich habe das erreicht, indem mit dem folgenden code.
<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>
Dieser code funktioniert einwandfrei und die Datei wird immer heruntergeladen, aber danach wirft Er eine exception.Das folgende ist meine Methode, die server-log -
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: ......
......
Gibt es viele post erhältlich im google bezüglich dieser Ausnahme aber ich kann nicht klar meine Fehler. Ich habe auch schon versucht, indem diese im servlet statt jsp. Das zeigt auch die gleiche Ausnahme.Ist dieser Weg richtig für das herunterladen einer Datei oder ich bin im falschen Weg? Ich brauche Hilfe
Dank
InformationsquelleAutor Vignesh Vino | 2013-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie sowohl
getServletOutputStream()
undgetWriter()
im gleichen Antwort.Kommen zu Ihrem problem. Vermeiden Sie das schreiben von scriptlets in JSP. Was auch immer Ihr tut in JSP implementieren Sie es in der Servlet.
Wird, die Sie anrufen
response.getOutputStream();
im JSP das illegal ist. Sie sollten entwederServletResponse.getOutputStream()
oderServletResponse.getWriter()
.Da JSPs verwenden ServletResponse.getWriter() standardmäßig. Sie schreiben sollten, ServletResponse.getWriter() statt ServletResponse.getOutputStream()
Dies ist, was die Java-Doc sagt :
Cannot make a static reference to the non-static method getWriter() from the type ServletResponse
Helfen, dieses Problem zu lösenInformationsquelleAutor Ramesh PVK
Scheint die Ausnahme geworfen wird, von dieser Linie.
Fall Ihren code zu senden, die PDF-Datei als Anwendung schlägt fehl, beim schreiben, dann wird es ausgelöst und der Ausnahme, und während Sie versuchen, zu drucken die Ausnahme mit der obigen Zeile die outputputstream wird bereits verwendet.
Nicht vermischen UI und Business-Logik in JSP. Verwenden Sie ein Servlet, um diesen job zu machen.
InformationsquelleAutor shazin
Haben Sie
</body>
nach Ihrem scriptlet. Es werde etwas drucken, um die Antwort Ausgabestrom, aber Sie haben schon geschlossen, dass man vor.Welchen Sinn macht es, zu zählen
<body>
- tags in deine Antwort, wenn das, was Sie wirklich wollen, zu tun ist stream ein PDF an den client zurück?Warum sind Sie einschließlich eine
<body>
und</body>
überhaupt? Sie sind streaming-PDF-Datei, sind Sie nicht?Ja..Da bin ich mit jsp-ich dachte, scriptlets haben, Hinzugefügt innerhalb der body-Tags
Wenn das einzige, was Ihre JSP tut, ist streaming eine PDF-Datei, die Sie nicht haben, um die surround-scriptlet mit
<body>
und</body>
.InformationsquelleAutor mthmulders