过滤器:

 public class Gzip implements Filter {

     public void destroy() {}

     public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse resp=(HttpServletResponse) response;
MyResp myResp=new MyResp(resp);//包装过的response
chain.doFilter(request, myResp);//放行 byte[] srcBytes= myResp.getSrcByte();//获取源数据
ByteArrayOutputStream bOutStream=new ByteArrayOutputStream();//目标容器
GZIPOutputStream zipOutStream=new GZIPOutputStream(bOutStream);//压缩工具
zipOutStream.write(srcBytes);//写到容器中
zipOutStream.close();//如果不关闭,会在缓存中,不写出 byte[] descByte=bOutStream.toByteArray(); System.out.println("-------------------");
System.out.println("压缩前:"+srcBytes.length);
System.out.println("压缩后:"+ descByte.length);
System.out.println("-------------------"); //使用原生response输出
resp.setContentType("text/html;charset=utf-8");
resp.setHeader("Content-Encoding", "Gzip");
resp.setContentLength(srcBytes.length); //输出
OutputStream out=resp.getOutputStream();
out.write(descByte);//关闭 }
public void init(FilterConfig filterConfig) throws ServletException {} } class MyResp extends HttpServletResponseWrapper
{
private PrintWriter outWrite;
private ByteArrayOutputStream srcByte;
//获取原生数据
public byte[] getSrcByte() {
if(outWrite!=null)//如果不关闭流,不会显示,因为数据在缓存中,没有写出
{
outWrite.close();
}
return srcByte.toByteArray();
} public MyResp(HttpServletResponse response) {
super(response); } //包装getWrite()方法,jsp页面输出内容使用的是response.getWriter().write("")
//所以要包装
@Override
public PrintWriter getWriter() throws IOException {
srcByte=new ByteArrayOutputStream();//输出的源数据
outWrite=new PrintWriter(new OutputStreamWriter(srcByte,"utf-8"));
return outWrite;
} }

如果过滤器需要过滤Servlet,则需要用response.getWriter().write("")输出,否则不会被过滤

 response.setContentType("text/html;charset=utf-8");
String str="你好,同学;Hello World";
PrintWriter writer=response.getWriter();
writer.write(str);
writer.close();

如果Servlet中使用response.getOutputStream().write("")输出,则需要包装getOutputStream()方法

 response.setContentType("text/html;charset=utf-8");
String str="你好,同学;Hello World";
String times=request.getParameter("times");
int n=Integer.valueOf(times);
OutputStream out=response.getOutputStream();
for (int i = 0; i < n; i++) {
out.write(str.getBytes("utf-8"));
}
out.close();

包装getOutputStream()方法

     @Override
public ServletOutputStream getOutputStream() throws IOException {
srcByte =new ByteArrayOutputStream();//输出的源数据
ServletOutputStream out=new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
srcByte.write(b);
}
};
return out;
}

过滤器压缩全站jsp的更多相关文章

  1. 【Java EE 学习 19】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】

    一.使用过滤器实现全站压缩 1.目标:对网站的所有JSP页面进行页面压缩,减少用户流量的使用.但是对图片和视频不进行压缩,因为图片和视频的压缩率很小,而且处理所需要的服务器资源很大. 2.实现原理: ...

  2. shiro:10个过滤器;10个jsp标签;5个@注解

    10个过滤器 过滤器简称 对应的java类 anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro. ...

  3. 过滤器Filter(拦截jsp页面的跳转)案例:

    创建一个 Filter , class类: 其继承于 接口 Filte(接口导包:import javax.servlet.Filter;) 在 web.xml 文件中配置并映射该 Filter. 其 ...

  4. javaweb的Filter过滤器设置全站编码

    FIlter配置全站编码有一种方法是重写getParameter方法,也就是继承HttpServletRequestWrapper在重写getParameter方法,还有一种就是如下: public ...

  5. jsp提交表单数据乱码,内置对象,以及过滤器

    jsp提交表单数据乱码解决方案 通过form表单给服务器提交数据的时候,如果提交的是中文数据,那么可能会出现乱码,如果表单的请求方式是post请求,那么可以使用如下方案解决乱码: 在调用getPara ...

  6. Servlet和JSP中的过滤器都是Java类

    JSP 过滤器 Servlet和JSP中的过滤器都是Java类,它们存在的目的如下: 在请求访问后端资源时拦截它 管理从服务器返回给客户端的响应 下面列出了多种常用的过滤器类型: 认证过滤器 数据压缩 ...

  7. DATASNAP压缩过滤器的使用

    ZLIBCOMPRESSION FILTER 作为范例,我们使用已随D2010提供的DataSnap过滤器.可用于在客户端和服务端压缩数据流.这里说的ZlibCompression过滤器可以在DbxC ...

  8. Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)

    中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...

  9. Servlet过滤器

    Servlet过滤器 [TOC] 1.过滤器的基本概念 1.1.基本概念 过滤器(Filter)属于tomcat服务器中的Servlet功能.在普通的javaweb服务中,jsp中的请求要被Servl ...

随机推荐

  1. android开发——数独游戏

    最近研究了一下android,写了一个数独游戏,具体如下: 游戏界面需要重写一个ShuduView继承View, 然后自定义一个Dialog: 1.需要继承 Dialog 类, 2.并要定义一个有参构 ...

  2. java8+spring+angularjs 项目应用

    最近有写一个电子订单商务网站,使用JAVA8,SPRING,ANGULARJS对项目使用的技术和大家分享. 第一次写博客,哪有不对需要改正的请联系改正. 因为是项目是我给别人做的无法提供源码见谅,我尽 ...

  3. PHPCMSv9 更改后台地址(测试)

    最新发布的PHPCMS V9由于采用了MVC的设计模式,所以它的后台访问地址是固定的,虽然可以通过修改路由配置文件来实现修改,但每次都修改路由配置文件对于我来说有点麻烦了,而且一不小心就会出错.这里使 ...

  4. 基于python的接口测试学习笔记一(初出茅庐)

    第一次写博客笔记,讲一下近来学习的接口自动化测试.网上查阅了相关资料,最后决定使用python语言写接口测试,使用的是python的第三方库requests.虽然python本身标准库中的 urlli ...

  5. Asp.net core与golang web简单对比测试

    最近因为工作需要接触了go语言,又恰好asp.net core发布RC2,就想简单做个对比测试. 下面是测试环境: CPU:E3-1230 v2 内存:16G 电脑有点不给力 操作系统:Centos7 ...

  6. New ipad安装Perl支持安装nikto

    Title:New ipad安装Perl支持安装nikto --2012-11-15 09:47 New Ipad 越了后. ssh new ipad 进入目录 cd /tmp 下载Key文件 wge ...

  7. WINDOWS基本数据类型示例

    最近也学学这些,争取把所有东东都串起来. #include <Windows.h> #include <stdio.h> int WINAPI WinMain( HINSTAN ...

  8. json与jsonp ajax

    今天在网上找了一下资料,发现这篇文章总结得好,果断转了:http://blog.csdn.net/superhosts/article/details/9057301

  9. HDU-1234(string字符串)

    Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人.   Input 测试输入的第一行给出记录的总 ...

  10. 使用MapReduce将HDFS数据导入到HBase(一)

    package com.bank.service; import java.io.IOException; import org.apache.hadoop.conf.Configuration;im ...