From d34a7ca82f08b3ac25d9002f3e3c5637f801b3a9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Wed, 9 Nov 2011 10:48:21 +0200 Subject: [PATCH] Moved setting cache time and date headers to WrappedResponse --- src/com/vaadin/terminal/WrappedResponse.java | 11 ++++++++ .../server/ApplicationResourceHandler.java | 27 +------------------ .../server/WrappedHttpServletResponse.java | 23 ++++++++++++++++ .../gwt/server/WrappedPortletResponse.java | 18 +++++++++++++ 4 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/com/vaadin/terminal/WrappedResponse.java b/src/com/vaadin/terminal/WrappedResponse.java index c6ffcf4a98..819e76b70d 100644 --- a/src/com/vaadin/terminal/WrappedResponse.java +++ b/src/com/vaadin/terminal/WrappedResponse.java @@ -12,8 +12,19 @@ public interface WrappedResponse { public void setHeader(String name, String value); + public void setDateHeader(String name, long timestamp); + public OutputStream getOutputStream() throws IOException; public PrintWriter getWriter() throws IOException; + /** + * Sets time in milliseconds, -1 means no cache at all. All required headers + * related to caching in the response are set based on the time. + * + * @param milliseconds + * Cache time in milliseconds + */ + public void setCacheTime(long milliseconds); + } diff --git a/src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java b/src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java index 5c89b64754..a5bec1881d 100644 --- a/src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java +++ b/src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java @@ -3,12 +3,7 @@ package com.vaadin.terminal.gwt.server; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Iterator; -import java.util.Locale; -import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -22,11 +17,6 @@ import com.vaadin.terminal.WrappedRequest; import com.vaadin.terminal.WrappedResponse; public class ApplicationResourceHandler implements RequestHandler { - private static final DateFormat HTTP_DATE_FORMAT = new SimpleDateFormat( - "EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH); - static { - HTTP_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT")); - } private static final Pattern APP_RESOURCE_PATTERN = Pattern .compile("/APP/(\\d+)/.*"); @@ -71,22 +61,7 @@ public class ApplicationResourceHandler implements RequestHandler { response.setContentType(stream.getContentType()); // Sets cache headers - final long cacheTime = stream.getCacheTime(); - if (cacheTime <= 0) { - response.setHeader("Cache-Control", "no-cache"); - response.setHeader("Pragma", "no-cache"); - response.setHeader("Expires", - HTTP_DATE_FORMAT.format(new Date(0))); - } else { - response.setHeader("Cache-Control", "max-age=" + cacheTime - / 1000); - response.setHeader( - "Expires", - HTTP_DATE_FORMAT.format(new Date(System - .currentTimeMillis() + cacheTime))); - // Required to apply caching in some Tomcats - response.setHeader("Pragma", "cache"); - } + response.setCacheTime(stream.getCacheTime()); // Copy download stream parameters directly // to HTTP headers. diff --git a/src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java b/src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java index 53a7f87707..f1890e3ac1 100644 --- a/src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java +++ b/src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java @@ -45,4 +45,27 @@ public class WrappedHttpServletResponse implements WrappedResponse { response.setHeader(name, value); } + public void setCacheTime(long milliseconds) { + doSetCacheTime(this, milliseconds); + } + + // Implementation shared with WrappedPortletResponse + static void doSetCacheTime(WrappedResponse response, long milliseconds) { + if (milliseconds <= 0) { + response.setHeader("Cache-Control", "no-cache"); + response.setHeader("Pragma", "no-cache"); + response.setDateHeader("Expires", 0); + } else { + response.setHeader("Cache-Control", "max-age=" + milliseconds + / 1000); + response.setDateHeader("Expires", System.currentTimeMillis() + + milliseconds); + // Required to apply caching in some Tomcats + response.setHeader("Pragma", "cache"); + } + } + + public void setDateHeader(String name, long timestamp) { + response.setDateHeader(name, timestamp); + } } \ No newline at end of file diff --git a/src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java b/src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java index 7c7292a084..5161fa6004 100644 --- a/src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java +++ b/src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java @@ -3,6 +3,11 @@ package com.vaadin.terminal.gwt.server; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; import javax.portlet.MimeResponse; import javax.portlet.PortletResponse; @@ -11,6 +16,11 @@ import javax.portlet.ResourceResponse; import com.vaadin.terminal.WrappedResponse; public class WrappedPortletResponse implements WrappedResponse { + private static final DateFormat HTTP_DATE_FORMAT = new SimpleDateFormat( + "EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH); + static { + HTTP_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT")); + } private final PortletResponse response; @@ -42,4 +52,12 @@ public class WrappedPortletResponse implements WrappedResponse { public void setHeader(String name, String value) { response.setProperty(name, value); } + + public void setDateHeader(String name, long timestamp) { + response.setProperty(name, HTTP_DATE_FORMAT.format(new Date(timestamp))); + } + + public void setCacheTime(long milliseconds) { + WrappedHttpServletResponse.doSetCacheTime(this, milliseconds); + } } \ No newline at end of file -- 2.39.5