I am trying to implement the GWT "perfect caching" by using a custom javax 
servlet filter. All files containing .nocache. should never be cached, and 
files containing .cache. should be cached for a week.

Here is the code for my filter:

public class GWTCacheControlFilter implements Filter
{
    @Override
    public void destroy()
    {    
    }
    
    @Override
    public void init(final FilterConfig config) throws ServletException
    {        
    }
    
    @Override
    public final void doFilter(final ServletRequest request, final 
ServletResponse response, final FilterChain filterChain)
        throws IOException, ServletException
    {
        final HttpServletRequest httpRequest = (HttpServletRequest) request;
        final String requestURI = httpRequest.getRequestURI();
        
        if (requestURI.contains(".nocache."))
        {
            final Date now = new Date();
            final HttpServletResponse httpResponse = (HttpServletResponse) 
response;
            httpResponse.setDateHeader("Date", now.getTime());
            httpResponse.setDateHeader("Expires", now.getTime() - 
86400000L);
            
            httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
            httpResponse.setHeader("Cache-control", "no-cache, no-store, 
must-revalidate"); // HTTP 1.1                        
        }
        else if (requestURI.contains(".cache."))
        {            
            final HttpServletResponse httpResponse = (HttpServletResponse) 
response;
            httpResponse.setDateHeader("Expires", 
System.currentTimeMillis() + 604800000L); // 1 week in future.
        }
        
        filterChain.doFilter(request, response);
    }
}

When I reload the page I see in Firebug a 304 Not Modified status on my 
initial myapp.nocache.js file, which sometimes leads to people seeing only 
a white page after a new deploy.  If I inspect the headers of the nocache 
file I don't see any Expires-tag.

The .cache. files seem to be cached correctly however (one week):

Date: Mon, 25 Jun 2012 15:11:57 GMT
Expires: Mon, 02 Jul 2012 15:11:57 GMT

I am using guice so in my servlet module I do:

filter("*").through(GWTCacheControlFilter.class);

However I have also tried adding the following to web.xml:

    <filter>
         <filter-name>gwtCacheControlFilter</filter-name>
         <filter-class>my.package.GWTCacheControlFilter</filter-class>
    </filter>

    <filter-mapping>
         <filter-name>gwtCacheControlFilter</filter-name>
         <url-pattern>/*</url-pattern>
    </filter-mapping>

Anyone have some ideas what I am missing? I'm deploying using Glassfish 
Open Source edition 3.1.1.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/5wb7eU-M3cUJ.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to