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
- servlet压缩数据
- servlet 对传输数据进行压缩
- servlet中压缩数据和下载图片
- servlet使用gzip压缩
- 【servlet】 压缩 下载
- 压缩数据
- 压缩数据
- servlet文件的压缩 HttpServlet
- servlet实现文件压缩下载
- 过程 数据集压缩
- java GZIP 压缩数据
- Hive_1. 数据存储 & 压缩
- 数据重删压缩
- Gzip压缩数据解压
- gzip压缩解压缩数据
- python压缩数据
- UnityGZip 压缩数据DLL
- Linux压缩数据
- 单例模式的C++实现
- u-boot-2014.10移植第17天----添加DM9000网卡支持(一)
- android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
- 百度移动研发2015校招笔试题
- C++11新特性,利用std::chrono精简传统获取系统时间的方法
- servlet压缩数据
- 插入排序(直接插入排序法)原理及代码
- 2005第几天
- 第十一周项目6-回文素数2
- 2006 求奇数的乘积
- 爱情那么短,遗忘那么长
- uva--185+dfs
- 数组1
- iOS:SDWebImage使用详解