servlet压缩数据

来源:互联网 发布:货运数据 量化投资 编辑:程序博客网 时间:2024/06/04 23:25
<pre class="java" name="code"> 

新建一个servelt,用于输出数据
public class TestServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//PrintWriter pw = response.getWriter();//pw.print("a测试a测试a测试a测试a测试a测试a测试a测试a测试a测试a测试a测试a测试a测试a测试a测试a测试");//pw.close();OutputStream out = response.getOutputStream();for (int i = 0; i < 50; i++) {out.write("你好真的谢谢".getBytes("utf-8"));}}}


新建一个过滤器,用于过滤上面的servlet和jsp,代码如下

public class GZipFilter2 implements Filter {public void destroy() {}public void doFilter(ServletRequest request,ServletResponse response, FilterChain doChain)throws IOException, ServletException {HttpServletResponse resp = (HttpServletResponse) response;MyResponse2 myresp = new MyResponse2(resp);//将包装好的response传递到下一个servlet中doChain.doFilter(request, myresp);//读取原生数据byte[] src = myresp.getSrc();//开始压缩ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip = new GZIPOutputStream(out);gzip.write(src);gzip.close();//使用原生的responseresp.setContentType("text/html;charset=UTF-8");byte[] desc = out.toByteArray();resp.setHeader("Content-Encoding", "gzip");resp.setContentLength(desc.length);resp.getOutputStream().write(desc);System.out.println("原来的数据:"+src.length);System.out.println("现在的数据:"+desc.length);}public void init(FilterConfig filterconfig) throws ServletException {}}//压缩数据,将数据存放到内存中class MyResponse2 extends HttpServletResponseWrapper{//将这个容器声明为成员变量private ByteArrayOutputStream srcByte;private PrintWriter out ;public MyResponse2(HttpServletResponse response) {super(response);}@Overridepublic PrintWriter getWriter() throws IOException {srcByte = new ByteArrayOutputStream();out = new PrintWriter(new OutputStreamWriter(srcByte,"utf-8"));return out;}@Overridepublic ServletOutputStream getOutputStream() throws IOException {srcByte = new ByteArrayOutputStream();ServletOutputStream out = new ServletOutputStream() {@Overridepublic void write(int b) throws IOException {srcByte.write(b);}};return out;}//提供一个方法获取原生数据public byte[] getSrc(){if(out!=null){//如果不关闭的话,看不到数据out.close();}return srcByte.toByteArray();} } 


web.xml代码如下:

   <filter>  <filter-name>GZipFilter2</filter-name>  <filter-class>com.yxy.filter.GZipFilter2</filter-class>  </filter>    <filter-mapping>  <filter-name>GZipFilter2</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>


 

 

0 0
原创粉丝点击