过滤器Filter的基本概述

过滤器Filter的基本概述

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

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

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



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


开发Filter简单步骤

1 创建一个JavaWeb工程

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

public class MyFilter implements 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组成一个集合,

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值