01: package com.openedit.servlet.gzip;
02:
03: import java.io.IOException;
04:
05: import javax.servlet.Filter;
06: import javax.servlet.FilterChain;
07: import javax.servlet.FilterConfig;
08: import javax.servlet.ServletException;
09: import javax.servlet.ServletRequest;
10: import javax.servlet.ServletResponse;
11: import javax.servlet.http.HttpServletRequest;
12: import javax.servlet.http.HttpServletResponse;
13:
14: public class GzipFilter implements Filter {
15:
16: public void doFilter(ServletRequest req, ServletResponse res,
17: FilterChain chain) throws IOException, ServletException {
18: if (req instanceof HttpServletRequest) {
19: HttpServletRequest request = (HttpServletRequest) req;
20: HttpServletResponse response = (HttpServletResponse) res;
21: if (canCompress(request)) {
22: GzipResponseWrapper wrappedResponse = new GzipResponseWrapper(
23: response);
24: chain.doFilter(req, wrappedResponse);
25: wrappedResponse.finishResponse();
26: return;
27: }
28: chain.doFilter(req, res);
29: }
30: }
31:
32: private boolean canCompress(HttpServletRequest inRequest) {
33: String ae = inRequest.getHeader("accept-encoding");
34: if (ae != null && ae.indexOf("gzip") != -1) {
35: //We no longer need to check since most browser pass the smart header
36: // String path = inRequest.getRequestURI();
37: // if( path != null || path.length() > 3)
38: // {
39: // path = path.substring(path.length() -4).toLowerCase();
40: // }
41: // if( path.equals(".jpg") || path.equals(".gif") || path.equals(".png") || path.equals(".zip") )
42: // {
43: // return false; //already compressed
44: // }
45: return true;
46: }
47: return false;
48: }
49:
50: public void init(FilterConfig filterConfig) {
51: // noop
52: }
53:
54: public void destroy() {
55: // noop
56: }
57: }
|