过滤器Filter的基本概述

来源:互联网 发布:拓普康怎样导入数据 编辑:程序博客网 时间:2024/05/23 14:56

过滤器Filter的基本概述

Filter:客户端访问Web资源时,可以进行请求和响应的拦截,

         如果条件成立,才可以让客户端访问Web资源

         如果条件不成立,不可以让客户端访问Web资源



可用于全站字符编码统一,权限控制,,,


开发Filter简单步骤

1 创建一个JavaWeb工程

2 创建一个普通Java类,去实现Filter接口

public class MyFilterimplements Filter {

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain)throws IOException, ServletException {

System.out.println("aaaaa");

//将请求放行,继续访问index.jsp

chain.doFilter(req,res);

System.out.println("bbbbb");

}

@Override

public void init(FilterConfig arg0)throws ServletException {

}

}

3 在web.xml文件中对Filter进行配置

<!-- Filter基本信息-->

  <filter>

  <!-- Filter取一个别名-->

  <filter-name>MyFilter</filter-name>

  <!-- Filter的全名(包名+类名) -->

  <filter-class>com.aaa.filter.MyFilter</filter-class>

  </filter>

 

  <!-- Filter过滤信息-->

  <filter-mapping>

  <!-- Filter取一个别名,同上-->

  <filter-name>MyFilter</filter-name>

  <!-- Filter的过滤路径,如你们访问我的index.jsp时,Filter就会进行过滤或拦截,配个/*所有请求都过滤 -->

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

  </filter-mapping>


Filter的生命周期

Filter:

无参构造器->init(),在web服务器启动时执行,且只执行一次

doFilter,当Filter需要过滤web.xml文件中配置的路径时,这时

doFilter会执行,可以执行N

Web服务器决定不要Filter了,就将Filter删除,在删除前先执行

destroy方法,且一个Filter只执行一次。

无参构造器,init()destroy(),只执行一次

doFilter()方法可以执行0次或N

Filter也是一个单例模式的


四种过滤类型

REQUEST:直接访问to.jsp时,Filter会进行拦截,除此之外,Filter不会进行拦截

          这种过滤类型是默认类型,可以在web.xml文件中不用配置

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

<dispatcher>REQUEST</dispatcher>

</filter-mapping>

 

FORWARD:只有在转发时,Filter会拦截,除此之外,Filter不会进行拦截

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

<!-- 过滤类型 -->

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

</filter-mapping>

 

INCLUDE:只有在包含时,Filter会拦截,除此之外,Filter不会进行拦截

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

<!-- 过滤类型 -->

<dispatcher>REQUEST</dispatcher>

<dispatcher>INCLUDE</dispatcher>

</filter-mapping>

 

ERROR:如有发生了错误信息,且在web.xml文件中声明了,Filter会拦截,

除此之外,Filter不会进行拦截

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

<!-- 过滤类型 -->

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

<dispatcher>ERROR</dispatcher>

</filter-mapping>

默认是REQUEST

如果多个Filter同时过滤同一种<url-pattern>的话,我们将这些Filter组成一个集合,

它们都在同一个链条上,这个链条就叫过滤器链。


原创粉丝点击