[Yanel-commits] rev 40072 - public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet

michi at wyona.com michi at wyona.com
Thu Nov 20 16:42:03 CET 2008


Author: michi
Date: 2008-11-20 16:42:02 +0100 (Thu, 20 Nov 2008)
New Revision: 40072

Modified:
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
304 implemented for resources which have ModifiableV2 implemented

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2008-11-20 14:57:41 UTC (rev 40071)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2008-11-20 15:42:02 UTC (rev 40072)
@@ -2068,10 +2068,25 @@
                 int bytesRead;
                 bytesRead = is.read(buffer);
 
-                // TODO: Compare If-Modified-Since with lastModified and return 304 without content resp. check on ETag
-                String ifModifiedSince = request.getHeader("If-Modified-Since");
-                if (ifModifiedSince != null) {
-                    if (log.isDebugEnabled()) log.debug("TODO: Implement 304 ...");
+                try {
+                    // Compare If-Modified-Since with lastModified and return 304 without content resp. check on ETag
+                    long ifModifiedSince = request.getDateHeader("If-Modified-Since");
+                    if (ifModifiedSince != -1) {
+                        if (res instanceof ModifiableV2) {
+                            long resourceLastMod = ((ModifiableV2)res).getLastModified();
+                            //log.debug(resourceLastMod + " " +  ifModifiedSince);
+                            if (resourceLastMod <= ifModifiedSince) {
+                                response.setStatus(javax.servlet.http.HttpServletResponse.SC_NOT_MODIFIED);
+                                return response;
+                            }
+                        } else {
+                            // TODO: Many resources do not implement ModifiableV2 and hence never return a lastModified and hence the browser will never ask for ifModifiedSince!
+                            //log.warn("Resource of path '" + res.getPath() + "' is not ModifiableV2 and hence cannot be cached!");
+                            if (log.isDebugEnabled()) log.debug("Resource of path '" + res.getPath() + "' is not ModifiableV2 and hence cannot be cached!");
+                        }
+                    }
+                } catch (Exception e) {
+                    log.error(e.getMessage(), e);
                 }
                 if(lastModified >= 0) response.setDateHeader("Last-Modified", lastModified);
 



More information about the Yanel-commits mailing list