Web压缩过滤器

    Web压缩过滤器

package mytest.gzipfilter;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.util.zip.GZIPOutputStream;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServletResponseWrapper;

/**

* Servlet Filter implementation class GzipFilter

*/

public class GzipFilter implements Filter {

/**

* Default constructor.

*/

public GzipFilter() {

// TODO Auto-generated constructor stub

}

/**

* @see Filter#destroy()

*/

public void destroy() {

// TODO Auto-generated method stub

}

/**

* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)

*/

public void doFilter(ServletRequest req, ServletResponse res,

FilterChain chain) throws IOException, ServletException {

// TODO Auto-generated method stub

// place your code here

HttpServletRequest request = (HttpServletRequest) req;

HttpServletResponse response = (HttpServletResponse) res;

BufferHttpResponse bufferHttpResponse = new BufferHttpResponse(response);

// pass the request along the filter chain

chain.doFilter(request, bufferHttpResponse);

byte out[] = bufferHttpResponse.getBuffer();

ByteArrayOutputStream bout = new ByteArrayOutputStream();

GZIPOutputStream gout = new GZIPOutputStream(bout);

gout.write(out);

gout.close();

byte gzip[] = bout.toByteArray();

response.setHeader("content-encoding", "gzip");

response.setContentLength(gzip.length);

response.getOutputStream().write(gzip);

}

/**

* @see Filter#init(FilterConfig)

*/

public void init(FilterConfig fConfig) throws ServletException {

// TODO Auto-generated method stub

}

}

class BufferHttpResponse extends HttpServletResponseWrapper {

private HttpServletResponse response;

private ByteArrayOutputStream bout = new ByteArrayOutputStream();

private PrintWriter pw;

public BufferHttpResponse(HttpServletResponse response) {

super(response);

this.response = response;

}

@Override

public ServletOutputStream getOutputStream() throws IOException {

return new MyServletOutputStream(bout);

}

@Override

public PrintWriter getWriter() throws IOException {

pw = new PrintWriter(new OutputStreamWriter(bout,this.response.getCharacterEncoding()));

return pw;

}

public byte[] getBuffer() {

try {

if(pw != null){

pw.close();

}

if (bout != null)

bout.flush();

return bout.toByteArray();

} catch (Exception e) {

throw new RuntimeException(e);

}

}

}

class MyServletOutputStream extends ServletOutputStream {

private ByteArrayOutputStream bout;

public MyServletOutputStream(ByteArrayOutputStream bout) {

this.bout = bout;

}

@Override

public void write(int arg0) throws IOException {

}

}

web.xml中配置压缩内容

<filter>

<display-name>GzipFilter</display-name>

<filter-name>GzipFilter</filter-name>

<filter-class>mytest.gzipfilter.GzipFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>GzipFilter</filter-name>

<url-pattern>/*.jsp</url-pattern>

<dispatcher>FORWARD</dispatcher>

<dispatcher>REQUEST</dispatcher>

</filter-mapping>

<filter-mapping>

<filter-name>GzipFilter</filter-name>

<url-pattern>/*.css</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>GzipFilter</filter-name>

<url-pattern>/*.js</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>GzipFilter</filter-name>

<url-pattern>/*.html</url-pattern>

</filter-mapping>

时间: 2024-11-06 18:45:46

Web压缩过滤器的相关文章

JavaWeb 后端 &lt;十二&gt; 之 过滤器 filter 乱码、不缓存、脏话、标记、自动登录、全站压缩过滤器

一.过滤器是什么?有什么? 1.过滤器属于Servlet规范,从2.3版本就开始有了. 2.过滤器就是对访问的内容进行筛选(拦截).利用过滤器对请求和响应进行过滤 二.编写步骤和执行过程 1.编码步骤: a.编写一个类:实现javax.servlet.Filter接口 public class FilterDemo1 implements Filter { public FilterDemo1(){ System.out.println("调用了默认的构造方法"); } //用户每次访

ASP.NET Web API 过滤器创建、执行过程(二)

前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器中,当然默认的基础服务也是有的,并且根据这些提供程序所获得的的过滤器信息集合进行排序.本篇就会对过滤器在创建完之后所做的一系列操作进行讲解. ASP.NET Web API 过滤器创建.执行过程(二) FilterGrouping过滤器分组类型 FilterGrouping类型是ApiController类型中的私有类型,它的作用就如同它的命名一样,用来对过

ASP.NET Web API 过滤器创建、执行过程(一)

前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就如今天的这个篇幅就是在上面内容之后所看到的一个知识要点之一. ASP.NET Web API 过滤器创建.执行过程(一) 下面就来讲解一下在ASP.NET Web API框架中过滤器的创建.执行过程. 过滤器所在的位置 图1 图1所示的就是控制器执行过程很粗略的表示. 通过上一篇内容我们了解到控制器方法选择器最后返回的并不是控制器方法,而是对于控制器方法描述

压缩字符流和字节流和全站压缩过滤器

1 public static void main(String[] args) throws Exception { 2 ByteArrayOutputStream bos = new ByteArrayOutputStream(); //字符流 3 OutputStreamWriter osw = new OutputStreamWriter(bos); 4 PrintWriter pw = new PrintWriter(osw); 5 pw.write("helloworld"

全站压缩过滤器

1.网站压缩的一个简单示例 public class ServletDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Web API过滤器

Web API包含在操作方法执行之前或之后添加额外的逻辑的过滤器.过滤器可用于提供横切特性,比如日志记录.异常处理.性能测量.身份验证和授权等等. 过滤器可以应用于Web API控制器或一个或多个操作方法上的属性.每个过滤器是必须实现System.Web.Http.Filters命名空间中的IFilter接口的类.然而,System.Web.Http.Filters命名空间还包括其他其他可用于创建特定过滤器的接口和类. 下表列出了可用于创建Web API过滤器的重要的接口和类. 过滤器类型 接口

web中过滤器的使用与乱码问题解决

一.过滤器Filter 1.filter的简介 filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目   标资源访问前后进行逻辑处理 2.快速入门 步骤: 1)编写一个过滤器的类实现Filter接口 2)实现接口中尚未实现的方法(着重实现doFilter方法) 3)在web.xml中进行配置(主要是配置要对哪些资源进行过滤) (1)创建Filter实现Filter 拦截之后要放行. package filter; import java.io.IOException

MVC和Web API 过滤器Filter

MVC和Web API Filter(过滤器) ASP.NET MVC 支持以下类型的操作筛选器: ·        授权筛选器.这些筛选器用于实现IAuthorizationFilter和做出关于是否执行操作方法(如执行身份验证或验证请求的属性)的安全决策.AuthorizeAttribute类和RequireHttpsAttribute类是授权筛选器的示例.授权筛选器在任何其他筛选器之前运行. ·        操作筛选器.这些筛选器用于实现IActionFilter以及包装操作方法执行.I

java Web常用过滤器

一.使浏览器不缓存页面的过滤器   import javax.servlet.*;   import javax.servlet.http.HttpServletResponse;   import java.io.IOException;     /*** 用于的使 Browser 不缓存页面的过滤器*/  public class ForceNoCacheFilter implements Filter {     public void doFilter(ServletRequest re