|
@@ -16,21 +16,19 @@ |
16 |
16 |
|
* the License. |
17 |
17 |
|
*/ |
18 |
18 |
|
|
19 |
|
- |
import java.io.IOException; |
20 |
|
- |
import java.util.regex.Pattern; |
21 |
|
- |
|
|
19 |
+ |
import java.io.*; |
|
20 |
+ |
import java.util.regex.*; |
22 |
21 |
|
import javax.servlet.*; |
23 |
|
- |
import javax.servlet.http.HttpServletRequest; |
24 |
|
- |
import javax.servlet.http.HttpServletResponse; |
|
22 |
+ |
import javax.servlet.http.*; |
25 |
23 |
|
|
26 |
24 |
|
/** |
27 |
25 |
|
* This is a filter which enforces proper caching of the generated GWT script |
28 |
26 |
|
* files. It requires that you serve your GWT application via a Java servlet |
29 |
27 |
|
* container. |
30 |
|
- |
* <p> |
|
28 |
+ |
* <p/> |
31 |
29 |
|
* To use, add the jar to <code>WEB-INF/lib</code> and add the |
32 |
30 |
|
* following to your deployment descriptor (web.xml): |
33 |
|
- |
* |
|
31 |
+ |
* <p/> |
34 |
32 |
|
* <pre> |
35 |
33 |
|
* <filter> |
36 |
34 |
|
* <filter-name>GWTCacheFilter</filter-name> |
|
@@ -58,7 +56,7 @@ |
58 |
56 |
|
* <param-value>.+\.cache\..+</param-value> |
59 |
57 |
|
* </init-param></pre> |
60 |
58 |
|
* |
61 |
|
- |
* <p> |
|
59 |
+ |
* |
62 |
60 |
|
* Usage notes |
63 |
61 |
|
* <ul> |
64 |
62 |
|
* <li>You can verify that the filter is being applied with Firefox's Web |
|
@@ -119,20 +117,21 @@ |
119 |
117 |
|
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig) |
120 |
118 |
|
*/ |
121 |
119 |
|
@Override |
122 |
|
- |
public void init(FilterConfig filterConfig) throws ServletException |
|
120 |
+ |
public void init( FilterConfig filterConfig ) |
|
121 |
+ |
throws ServletException |
123 |
122 |
|
{ |
124 |
|
- |
String forceDontCachePatternString = filterConfig.getInitParameter(INITPARAM_FORCEDONTCACHE); |
125 |
|
- |
String forceCachePatternString = filterConfig.getInitParameter(INITPARAM_FORCECACHE); |
126 |
|
- |
if (forceDontCachePatternString == null) |
|
123 |
+ |
String forceDontCachePatternString = filterConfig.getInitParameter( INITPARAM_FORCEDONTCACHE ); |
|
124 |
+ |
String forceCachePatternString = filterConfig.getInitParameter( INITPARAM_FORCECACHE ); |
|
125 |
+ |
if ( forceDontCachePatternString == null ) |
127 |
126 |
|
{ |
128 |
127 |
|
forceDontCachePatternString = DEFAULT_FORCEDONTCACHE; |
129 |
128 |
|
} |
130 |
|
- |
if (forceCachePatternString == null) |
|
129 |
+ |
if ( forceCachePatternString == null ) |
131 |
130 |
|
{ |
132 |
131 |
|
forceCachePatternString = DEFAULT_FORCECACHE; |
133 |
132 |
|
} |
134 |
|
- |
forceDontCachePattern = Pattern.compile(forceDontCachePatternString); |
135 |
|
- |
forceCachePattern = Pattern.compile(forceCachePatternString); |
|
133 |
+ |
forceDontCachePattern = Pattern.compile( forceDontCachePatternString ); |
|
134 |
+ |
forceCachePattern = Pattern.compile( forceCachePatternString ); |
136 |
135 |
|
} |
137 |
136 |
|
|
138 |
137 |
|
/* |
|
@@ -140,33 +139,34 @@ |
140 |
139 |
|
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) |
141 |
140 |
|
*/ |
142 |
141 |
|
@Override |
143 |
|
- |
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException |
|
142 |
+ |
public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) |
|
143 |
+ |
throws IOException, ServletException |
144 |
144 |
|
{ |
145 |
|
- |
if (request instanceof HttpServletRequest) |
|
145 |
+ |
if ( request instanceof HttpServletRequest ) |
146 |
146 |
|
{ |
147 |
147 |
|
HttpServletRequest hRequest = (HttpServletRequest) request; |
148 |
|
- |
if (forceDontCachePattern.matcher(hRequest.getRequestURL()).matches()) |
|
148 |
+ |
if ( forceDontCachePattern.matcher( hRequest.getRequestURL() ).matches() ) |
149 |
149 |
|
{ |
150 |
150 |
|
HttpServletResponse hResponse = (HttpServletResponse) response; |
151 |
|
- |
hResponse.setHeader("Cache-Control", "no-cache no-store must-revalidate"); |
152 |
|
- |
hResponse.setHeader("Pragma", "no-cache"); // HTTP/1.0 |
153 |
|
- |
hResponse.setDateHeader("Expires", 86400000); // January 2, 1970 |
|
151 |
+ |
hResponse.setHeader( "Cache-Control", "no-cache no-store must-revalidate" ); |
|
152 |
+ |
hResponse.setHeader( "Pragma", "no-cache" ); // HTTP/1.0 |
|
153 |
+ |
hResponse.setDateHeader( "Expires", 86400000 ); // January 2, 1970 |
154 |
154 |
|
} |
155 |
|
- |
else if (forceCachePattern.matcher(hRequest.getRequestURL()).matches()) |
|
155 |
+ |
else if ( forceCachePattern.matcher( hRequest.getRequestURL() ).matches() ) |
156 |
156 |
|
{ |
157 |
157 |
|
HttpServletResponse hresponse = (HttpServletResponse) response; |
158 |
158 |
|
|
159 |
159 |
|
// the w3c spec requires a maximum age of 1 year |
160 |
160 |
|
// Firefox 3+ needs 'public' to cache this resource when received via SSL |
161 |
|
- |
hresponse.setHeader("Cache-Control", "public max-age=31536000"); |
|
161 |
+ |
hresponse.setHeader( "Cache-Control", "public max-age=31536000" ); |
162 |
162 |
|
|
163 |
163 |
|
// necessary to overwrite "Pragma: no-cache" header |
164 |
|
- |
hresponse.setHeader("Pragma", "temp"); |
165 |
|
- |
hresponse.setHeader("Pragma", ""); |
166 |
|
- |
hresponse.setDateHeader("Expires", System.currentTimeMillis() + 31536000000l); |
|
164 |
+ |
hresponse.setHeader( "Pragma", "temp" ); |
|
165 |
+ |
hresponse.setHeader( "Pragma", "" ); |
|
166 |
+ |
hresponse.setDateHeader( "Expires", System.currentTimeMillis() + 31536000000l ); |
167 |
167 |
|
} |
168 |
168 |
|
} |
169 |
|
- |
chain.doFilter(request, response); |
|
169 |
+ |
chain.doFilter( request, response ); |
170 |
170 |
|
} |
171 |
171 |
|
|
172 |
172 |
|
/* |