Announcement

Collapse
No announcement yet.

JSP/Struts - Problem bei Anzeige einer Datei

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JSP/Struts - Problem bei Anzeige einer Datei

    Hallo Leute,
    ich habe eine Webanwendung geschrieben, die ein PDF erzeugt, dieses vom Server aufgreift und dem Benutzer anzeigt.
    Das funktioniert soweit auch auf meinem Entwicklungsrechner und auf einer VM.
    Nun habe ich das ganze auf einen (recht schwachen) Server umgezogen und fast immer bekomme ich eine java.lang.IllegalStateException beim Anzeigen des PDFs. Nur in den seltesten Fällen funktioniert es.

    Die Exception:
    javax.servlet.ServletException: org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response
    org.apache.struts.chain.ComposableRequestProcessor .process(ComposableRequestProcessor.java:286)
    org.apache.struts.action.ActionServlet.process(Act ionServlet.java:1913)
    org.apache.struts.action.ActionServlet.doPost(Acti onServlet.java:462)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:717)

    Die JSP-Seite:
    Code:
    <%@ page language="java" contentType="text/html;charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="/taglibs/struts-html.tld" prefix="html"%>
    <%@ page language="java" import="java.io.*"%>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <% 
        File file = (File)request.getAttribute("pdf");
        
        BufferedInputStream filein = new BufferedInputStream(new FileInputStream(file));
        ByteArrayOutputStream byteStream = new ByteArrayOutputStream(512);
        int objByte;
        
        while((objByte = filein.read()) != -1) {
            byteStream.write(objByte);
        }
        
        
        filein.close(); 
        
        response.reset();
        response.setContentType("application/pdf");
        response.setContentLength(byteStream.size());
        out.clear();
        byteStream.writeTo(response.getOutputStream());
     
    %>
    Hat jemand eine Idee woran das liegen könnte bzw. wie ich es lösen kann? Bei meinem Rechner oder bei der VM ist es nie zu diesem Problem gekommen und es hat immer funktioniert.

    Vielen Dank schon mal!
    Mephi

  • #2
    Sicherlich nicht an dem schwachen Server.

    Der Fehler besagt, dass schon eine Antwort an den Client raus ist und demzufolge keine mehr (hier das PDF) gesandt werden kann

    Offenbar benutzt du struts. Wieso erfolgt die Ausgabe der PDF-Datei nicht in einer Action, sondern in einer JSP? Was macht die Action?
    Christian

    Comment


    • #3
      Ja, ich benutze struts.

      Die Action gibt den Anstoß zum Generieren des PDFs, nimmt nach der Generierung das PDF auf, packt es in die Form (Attribut "pdf") und leitet auf die JSP weiter.

      Ist halt merkwürdig, dass es auf 2 Systemen immer funktioniert und ich jetzt diesen Fehler erhalte, der aber auch nicht immer auftritt sondern "nur" in 90% der Fälle.

      Comment


      • #4
        Nun, warum die Action das PDF nicht selbst rausgibt......

        Würde da mal ohne out.clear(); testen
        Christian

        Comment


        • #5
          So wies aussieht liegts doch an dem schwachen Rechner. An einer andern Stelle muss ich auf eine Datei zugreifen. Da die Verarbeitung so langsam ist, bleibt er dort hin und wieder hängen, da die Datei noch nicht vollständig erstellt wurde. Hat also gar nichts mit der JSP zu tun.

          Aber vielen Dank für deine Hilfe!

          Comment

          Working...
          X