Ich habe ein paar Java-Servlets (3.x - Tomcat 8) ausgeführt, die PDF-Dokumente generieren und zurücksenden. Ich hatte nie Probleme mit irgendwelchen von ihnen. Ich schrieb vor kurzem ein neues Servlet auch ein PDF-Dokument zu erstellen und zurück, und diese neue Servlet des exakt gleiche Stück Antwortcode verwendet, während die andere verwenden:Java-Servlet schreibt keine Antwortbytes
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Disposition","attachment; filename=\""+filename+".pdf\"");
response.setContentLength(pdfBytes.length);
System.out.println("# Bytes => " + pdfBytes.length);
ServletOutputStream sos = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(sos);
bos.write(pdfBytes);
sos.flush();
sos.close();
Wie gesagt, dies war funktioniert gut mit den anderen, aber wenn ich das neue Servlet aufrufen, gibt es 0 Bytes zurück, obwohl die print-Anweisung einen Wert ungleich Null hat.
Allerdings, wenn ich die Antwort Schreiben von Code oben zu ändern:
OutputStream os = response.getOutputStream();
os.write(pdfBytes);
os.flush();
os.close();
... es funktioniert gut, ein wohlgeformtes PDF-Dokument zurück. Warum könnte das passieren?
Sollte nicht 'sos.flush();' 'sein bos.flush (); usw.? – Thomas