过滤器

      所谓过滤器在用户请求与WEB资源间增加一个组件,

通过它可对请求的拦截,以达到增加新功能的目地。过滤器是AOP编程思想的典型实现

tip:

业务逻辑的各个部分进行隔离, 从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。   

     AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。

调用者和被调用者之间的解耦,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");     }
 
(ServletRequest arg0, ServletResponse arg1,

               FilterChain arg2) throws IOException, ServletException {

          //将编码成utf-8
           HttpServletRequest req = (HttpServletRequest) arg0;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 将信息传递给过滤器