# HG changeset patch # User robcast # Date 1298117011 -3600 # Node ID de7bc4c9a4c0f06d3d87f6987bac5ed6d59d1222 # Parent 52c5595af03ec0dc54f0b3523170ac39a9f84f3f remove all ServletOutputStream.flush(). (stupid me ;-) diff -r 52c5595af03e -r de7bc4c9a4c0 servlet/src/digilib/servlet/Scaler.java --- a/servlet/src/digilib/servlet/Scaler.java Fri Feb 18 23:13:26 2011 +0100 +++ b/servlet/src/digilib/servlet/Scaler.java Sat Feb 19 13:03:31 2011 +0100 @@ -30,7 +30,7 @@ public class Scaler extends HttpServlet { /** digilib servlet version (for all components) */ - public static final String version = "1.8.4a"; + public static final String version = "1.8.4a2"; /** servlet error codes */ public static enum Error {UNKNOWN, AUTH, FILE, IMAGE}; @@ -309,6 +309,11 @@ img = this.errorImgFile; status = HttpServletResponse.SC_BAD_REQUEST; } + if (response.isCommitted()) { + // response already committed + logger.error("Unable to send error: " + msg); + return; + } if (type == ErrMsg.TEXT) { ServletOps.htmlMessage(msg, response); } else if (type == ErrMsg.CODE) { diff -r 52c5595af03e -r de7bc4c9a4c0 servlet/src/digilib/servlet/ServletOps.java --- a/servlet/src/digilib/servlet/ServletOps.java Fri Feb 18 23:13:26 2011 +0100 +++ b/servlet/src/digilib/servlet/ServletOps.java Sat Feb 19 13:03:31 2011 +0100 @@ -222,6 +222,10 @@ public static void sendFile(File f, String mt, String name, HttpServletResponse response, Logger logger) throws ImageOpException, ServletException { logger.debug("sendRawFile(" + mt + ", " + f + ")"); + if (response.isCommitted()) { + logger.warn("sendFile: response already committed!"); + //return; + } if (mt == null) { // auto-detect mime-type mt = FileOps.mimeForFile(f); @@ -238,22 +242,30 @@ } response.addHeader("Content-Disposition", "attachment; filename=\""+name+"\""); } + FileInputStream inFile = null; try { - FileInputStream inFile = new FileInputStream(f); + inFile = new FileInputStream(f); OutputStream outStream = response.getOutputStream(); + // TODO: should we set content length? + // see http://www.prozesse-und-systeme.de/servletFlush.html response.setContentLength( (int) f.length()); byte dataBuffer[] = new byte[4096]; int len; while ((len = inFile.read(dataBuffer)) != -1) { // copy out file outStream.write(dataBuffer, 0, len); - outStream.flush(); } - response.flushBuffer(); - inFile.close(); } catch (IOException e) { logger.error("Error sending file:", e); throw new ServletException("Error sending file:", e); + } finally { + try { + if (inFile != null) { + inFile.close(); + } + } catch (IOException e) { + // nothing to do + } } } @@ -285,6 +297,10 @@ public static void sendImage(DocuImage img, String mimeType, HttpServletResponse response, Logger logger) throws ImageOpException, ServletException { + if (response.isCommitted()) { + logger.warn("sendImage: response already committed!"); + //return; + } try { OutputStream outstream = response.getOutputStream(); // setup output -- if mime type is set use that otherwise @@ -301,13 +317,11 @@ // write the image response.setContentType(mimeType); img.writeImage(mimeType, outstream); - outstream.flush(); } catch (IOException e) { logger.error("Error sending image:", e); throw new ServletException("Error sending image:", e); - } finally { - img.dispose(); } + // TODO: should we: finally { img.dispose(); } } } \ No newline at end of file