From 647bae40207b73c0b1b527eb83b8b614d29497eb Mon Sep 17 00:00:00 2001 From: Erik Forkalsrud Date: Sat, 17 Jan 2009 17:22:56 -0800 Subject: [PATCH] add last-modified headers add flush() at end of scaleImage() --- src/org/forkalsrud/album/web/AlbumServlet.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/org/forkalsrud/album/web/AlbumServlet.java b/src/org/forkalsrud/album/web/AlbumServlet.java index 2fb6925..39414dd 100644 --- a/src/org/forkalsrud/album/web/AlbumServlet.java +++ b/src/org/forkalsrud/album/web/AlbumServlet.java @@ -128,13 +128,26 @@ public class AlbumServlet return false; } + boolean notModified(HttpServletRequest req, File f) { + long reqDate = req.getDateHeader("If-Modified-Since"); + long fDate = f.lastModified(); + return reqDate > 0 && fDate > 0 && fDate <= reqDate; + } + synchronized void scaleImage(HttpServletRequest req, HttpServletResponse res, File file, Thumbnail thumbnail, String size) throws IOException { + if (notModified(req, file)) { + res.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + System.out.println(file.getName() + " not modified (based on date)"); + return; + } String fileEtag = thumbnail.getEtag() + "-" + size; if (etagMatches(req, fileEtag)) { res.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + System.out.println(file.getName() + " not modified (based on etag)"); return; } + res.setDateHeader("Last-Modified", file.lastModified()); res.setHeader("ETag", fileEtag); Dimension orig = thumbnail.getSize(); @@ -213,6 +226,8 @@ public class AlbumServlet writer.setOutput(ios); // writer.write(null, new IIOImage(buf2, null, null), wParam); writer.write(buf2); + ios.flush(); + res.getOutputStream().close(); }