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