Author: taylor
Date: Mon Nov 27 11:59:05 2006
New Revision: 479742

URL: http://svn.apache.org/viewvc?view=rev&rev=479742
Log:
cache resources to cut down on amount of dojo downloads per page
cache expiration configured in web.xml
this was written by Steve Milek, I just reviewed it and am checking it in now

Added:
    
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/StaticResourceCachingFilter.java
Modified:
    portals/jetspeed-2/trunk/src/webapp/WEB-INF/web.xml

Added: 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/StaticResourceCachingFilter.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/StaticResourceCachingFilter.java?view=auto&rev=479742
==============================================================================
--- 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/StaticResourceCachingFilter.java
 (added)
+++ 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/StaticResourceCachingFilter.java
 Mon Nov 27 11:59:05 2006
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.engine.servlet;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class StaticResourceCachingFilter implements Filter
+{
+    // constants
+
+    private static final String HTTP_HEADER_EXPIRES = "Expires" ;
+    private static final String HTTP_HEADER_CACHE_CONTROL = "Cache-Control" ;
+    private static final String HTTP_HEADER_CACHE_MAX_AGE = "max-age" ;
+    private static final String HTTP_HEADER_CACHE_MAX_AGE_EQ = "max-age=" ;
+
+    private static String PARAM_EXPIRES_HOURS = "ExpireHours";
+
+    private static final TimeZone GMT_TIME_ZONE = TimeZone.getTimeZone( "GMT" 
);
+
+
+    // members
+    
+    private double expires_in_hours = 0.0;
+    private int max_age = 0;
+
+    // constructor
+
+    public StaticResourceCachingFilter()
+    {
+        super() ;
+    }
+
+
+    // protocol
+
+    public void init( FilterConfig config )
+    {
+        try
+        {
+            expires_in_hours = Double.parseDouble( config.getInitParameter( 
PARAM_EXPIRES_HOURS ) );
+        }
+        catch ( NumberFormatException ex )
+        {
+            expires_in_hours = 0;
+        }
+        max_age = (int)(expires_in_hours * 60);
+    }
+    
+    public void doFilter( ServletRequest aRequest, ServletResponse aResponse, 
FilterChain chain )
+        throws java.io.IOException, ServletException
+    {
+        HttpServletRequest request = (HttpServletRequest)aRequest;
+        HttpServletResponse response = (HttpServletResponse)aResponse;
+        if ( max_age > 0 )
+        {
+            String cacheControlVal = HTTP_HEADER_CACHE_MAX_AGE_EQ + max_age;
+            response.setHeader( HTTP_HEADER_CACHE_CONTROL, cacheControlVal );
+        }
+        chain.doFilter( request, response );
+    }
+
+    public void destroy()
+    {
+    }
+
+
+    /* unused (we're only doing Cache-Control max-age), but works for 
generating Expires header */
+    private String createExpiresHeader( int expiresInHours )
+    {
+        SimpleDateFormat sdf = new SimpleDateFormat( "EEE, dd MMM yyyy 
HH:mm:ss zzz", Locale.US );
+        sdf.setTimeZone( GMT_TIME_ZONE );
+        Calendar cal = Calendar.getInstance();
+        cal.add( Calendar.HOUR, expiresInHours );
+        long millis = cal.getTimeInMillis();
+        Date d = new Date( millis );
+        return sdf.format( d );
+    }
+}

Modified: portals/jetspeed-2/trunk/src/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/WEB-INF/web.xml?view=diff&rev=479742&r1=479741&r2=479742
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/WEB-INF/web.xml (original)
+++ portals/jetspeed-2/trunk/src/webapp/WEB-INF/web.xml Mon Nov 27 11:59:05 2006
@@ -35,6 +35,20 @@
     <filter-name>AJAXFilter</filter-name>
     <filter-class>org.apache.jetspeed.ajax.AJAXFilter</filter-class>   
   </filter>
+    
+  <filter>
+      <filter-name>staticResourceCachingFilter</filter-name>
+      
<filter-class>org.apache.jetspeed.engine.servlet.StaticResourceCachingFilter</filter-class>
+      <init-param>
+          <param-name>ExpireHours</param-name>
+          <param-value>48</param-value>
+      </init-param>
+  </filter>
+
+  <filter-mapping>
+      <filter-name>staticResourceCachingFilter</filter-name>
+      <servlet-name>default</servlet-name>
+  </filter-mapping>    
   <!--
   <filter>
     <filter-name>PortalFilter</filter-name>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to