1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.servlets;
15
16 import java.io.IOException;
17 import java.io.OutputStream;
18 import java.io.OutputStreamWriter;
19 import java.io.PrintWriter;
20 import java.io.UnsupportedEncodingException;
21
22 import javax.servlet.FilterConfig;
23 import javax.servlet.ServletException;
24 import javax.servlet.http.HttpServletRequest;
25 import javax.servlet.http.HttpServletResponse;
26
27 import org.eclipse.jetty.io.UncheckedPrintWriter;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public class IncludableGzipFilter extends GzipFilter
44 {
45 boolean _uncheckedPrintWriter=false;
46
47 @Override
48 public void init(FilterConfig filterConfig) throws ServletException
49 {
50 super.init(filterConfig);
51
52 String tmp=filterConfig.getInitParameter("uncheckedPrintWriter");
53 if (tmp!=null)
54 _uncheckedPrintWriter=Boolean.valueOf(tmp).booleanValue();
55 }
56
57 @Override
58 protected GZIPResponseWrapper newGZIPResponseWrapper(HttpServletRequest request, HttpServletResponse response)
59 {
60 return new IncludableResponseWrapper(request,response);
61 }
62
63 public class IncludableResponseWrapper extends GzipFilter.GZIPResponseWrapper
64 {
65 public IncludableResponseWrapper(HttpServletRequest request, HttpServletResponse response)
66 {
67 super(request,response);
68 }
69
70 @Override
71 protected GzipStream newGzipStream(HttpServletRequest request,HttpServletResponse response,long contentLength,int bufferSize, int minGzipSize) throws IOException
72 {
73 return new IncludableGzipStream(request,response,contentLength,bufferSize,minGzipSize);
74 }
75 }
76
77 public class IncludableGzipStream extends GzipFilter.GzipStream
78 {
79 public IncludableGzipStream(HttpServletRequest request, HttpServletResponse response, long contentLength, int bufferSize, int minGzipSize)
80 throws IOException
81 {
82 super(request,response,contentLength,bufferSize,minGzipSize);
83 }
84
85 @Override
86 protected boolean setContentEncodingGzip()
87 {
88 if (_request.getAttribute("javax.servlet.include.request_uri")!=null)
89 _response.setHeader("org.eclipse.jetty.server.include.Content-Encoding", "gzip");
90 else
91 _response.setHeader("Content-Encoding", "gzip");
92
93 return _response.containsHeader("Content-Encoding");
94 }
95 }
96
97 @Override
98 protected PrintWriter newWriter(OutputStream out,String encoding) throws UnsupportedEncodingException
99 {
100 if (_uncheckedPrintWriter)
101 return encoding==null?new UncheckedPrintWriter(out):new UncheckedPrintWriter(new OutputStreamWriter(out,encoding));
102 return super.newWriter(out,encoding);
103 }
104 }