⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compressionfilter.java

📁 运用过滤器对请求和响应进行替换
💻 JAVA
字号:
package org.sunxin.ch16.filter;

import java.io.IOException;
import java.util.zip.GZIPOutputStream;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CompressionFilter implements Filter
{
	public void init(FilterConfig filterConfig) throws ServletException{}

	public void destroy(){}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException
	{
		HttpServletRequest httpReq = (HttpServletRequest) request;
		HttpServletResponse httpResp = (HttpServletResponse) response;

		String acceptEncodings = httpReq.getHeader("Accept-Encoding");
		if (acceptEncodings != null && acceptEncodings.indexOf("gzip") > -1)
		{
			// 得到响应对象的封装类对象
			CompressionResponseWrapper respWrapper = new CompressionResponseWrapper(
					httpResp);
			
			// 设置Content-Encoding实体报头,告诉浏览器实体正文采用了gzip压缩编码
			respWrapper.setHeader("Content-Encoding", "gzip");
			chain.doFilter(httpReq, respWrapper);
			
			//得到GZIPOutputStream输出流对象
			GZIPOutputStream gzipos = respWrapper.getGZIPOutputStream();
			//调用GZIPOutputStream输出流对象的finish()方法完成将压缩数据写入
			//响应输出流的操作,无须关闭输出流
			gzipos.finish();
		}
		else
		{
			chain.doFilter(httpReq, httpResp);
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -