AmazingCounters.com

过滤器简介Filter

过滤器
      所谓过滤器在用户请求与WEB资源间增加一个组件,
通过它可对请求的拦截,以达到增加新功能的目地。过滤器是AOP编程思想的典型实现
tip:
      面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离, 从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。   
     AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。
     可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现
      工作原理   示意图
       生命周期
             当容器启动时,过滤器随之实例化(调用init()方法)
             当容器关闭或项目热部署时,会销毁实例(调用destory()方法)
             当请求的资源满足规则时,容器就会调用doFilter()方法
一个简单的文件编码过滤器的编写
代码如下

public class EncodeFilter implements Filter{
      //设定参数,在web.xml文件中配置该参数
 
     private String type;
 
     public void init(FilterConfig arg0) throws ServletException {
          //取得初始化参数,从配置文件中读取配置参数值
          this.type =arg0.getInitParameter("type");
     }
 
     public void doFilter(ServletRequest arg0, ServletResponse arg1,
               FilterChain arg2
) throws IOException, ServletException {
          //将编码成utf-8
          HttpServletRequest req = (HttpServletRequest) arg0;
          HttpServletResponse resp = (HttpServletResponse) arg1;
          //设置过滤规则【即请求的编码使用utf-8,应答使用utf-8】
          req.setCharacterEncoding(this.type);
          resp.setContentType("text/html;charset="+this.type);
          
          arg2.doFilter(arg0, arg1);
     }
     public void destroy() {
          // TODO Auto-generated method stub
     }
}

总结:
    • 过滤器是 Web 服务组件
    • 过滤器可以访问客户端输入的请求和 Web 资源输出的响应
    • 过滤器定义用于将过滤器名称与特定的类关联在一起
    • 过滤器映射用于将过滤器映射至 Web 资源
    • Filter 接口包含各种方法,如 init()doFilter() destroy()
    • 每次用户发送请求或 Web 资源发送响应时都会调用 doFilter() 方法
    • FilterChain 接口用于调用过滤器链中的下一个过滤器
    • 在初始化过程中,Servlet 使用 FilterConfig 将信息传递给过滤器
posted @ 2016-01-11 21:24  御史  阅读(198)  评论(0编辑  收藏  举报