关于过滤器的一个例子(涉及到装饰模式)
来源:互联网 发布:hse培训矩阵表图片 编辑:程序博客网 时间:2024/05/19 20:20
Decorator设计模式的实现
•1.首先看需要被增强对象继承了什么接口或父类,编写一个类也去继承这些接口或父类。
•2.在类中定义一个变量,变量类型即需增强对象的类型。
•3.在类中定义一个构造函数,接收需增强的对象。
•4.覆盖需增强的方法,编写增强的代码。
下面是一个解决全站压缩问题的一个过滤器,关于过滤器的执行过程我就不多说了。
下面是一个解决全站压缩问题的一个过滤器,关于过滤器的执行过程我就不多说了。
package com.why.web.filter;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStream;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;import com.sun.org.apache.bcel.internal.generic.NEW;//解决全站压缩问题public class GzipFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)req;HttpServletResponse response = (HttpServletResponse)resp;BufferResponse myresponse = new BufferResponse(response);chain.doFilter(request, myresponse);//拿出缓存中的数据,压缩后再打给浏览器byte[] bytes = myresponse.getBuffer();ByteArrayOutputStream bout = new ByteArrayOutputStream();GZIPOutputStream gzip = new GZIPOutputStream(bout);gzip.write(bytes);gzip.close();byte[] gzipbyte = bout.toByteArray();response.setHeader("content-encoding", "gzip");response.setContentLength(gzipbyte.length);response.getOutputStream().write(gzipbyte);}public void destroy() {}}class BufferResponse extends HttpServletResponseWrapper{private HttpServletResponse response;private ByteArrayOutputStream bout = new ByteArrayOutputStream();private PrintWriter pw;public BufferResponse(HttpServletResponse response) {super(response);this.response = response;}@Overridepublic ServletOutputStream getOutputStream() throws IOException {return new MyServletOutputStream(bout);}@Overridepublic PrintWriter getWriter() throws IOException {pw = new PrintWriter(new OutputStreamWriter(bout,response.getCharacterEncoding()));//pw = new PrintWriter(bout);return pw;}public byte[] getBuffer(){try {if(pw != null){pw.close();}if(bout != null){bout.flush();return bout.toByteArray();}return null;} catch (Exception e) {throw new RuntimeException(e);}}}class MyServletOutputStream extends ServletOutputStream{private ByteArrayOutputStream bout;public MyServletOutputStream(ByteArrayOutputStream bout) {super();this.bout = bout;}@Overridepublic void write(int b) throws IOException {this.bout.write(b);}}
0 0
- 关于过滤器的一个例子(涉及到装饰模式)
- 关于装饰模式的一个小例子
- 关于复合模式、策略模式,工厂模式、观察者模式、装饰模式的一个好例子
- 基于人吃饭的例子设计一个装饰设计模式:
- java装饰者模式的一个形象例子
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- 用装饰模式优化代码的一个简单例子
- 一个例子理解装饰器模式
- 装饰模式的java实现例子
- 记下一个python装饰器的例子
- 一个理解装饰器很好的例子
- 一个登陆过滤器的小例子
- Servlet编码过滤器(装饰模式)
- 装饰模式例子(Decorator Pattern)
- 装饰模式例子
- 装饰者模式例子
- 【js组件】修改cityselect以适应项目(2)
- new(p) T1(value)
- Java 下实现锁无关数据结构(转)
- 关于文件比对
- nfs使用方法详解
- 关于过滤器的一个例子(涉及到装饰模式)
- spring配置文件详解
- opencv内存中断问题
- android DexClassLoader 加载pak
- TotoiseSVN的基本使用方法
- 黑马程序员--IO(1)
- CISCO_CCNA
- 方法覆盖和方法重载必须满足的条件
- window.location.href和window.location.replace的区别