Filter学习笔记

Filter:过滤器

1、概念:

  • web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
  • 作用:
    • 一般用于完成通过的操作。如:登录验证、同一编码处理、敏感字符过滤……

2、 快速入门:

​ 1、实现步骤:

​ 1、创建类实现Filter接口(注意是javax.servlet.Filter)

​ 2、重写方法

​ 3、配置拦截路径

​ 1、web.xml配置

<filter>
    <filter-name>Demo01</filter-name> <!--取名-->
    <filter-class>cn.yzx.Filter.FilterDemo01</filter-class> <!--具体路径-->
</filter>
<filter-mapping>
    <filter-name>Demo01</filter-name> <!--配置的Filter的名称-->
    <url-pattern>/*</url-pattern> <!--拦截路径,访问那些资源会被拦截-->
</filter-mapping>

​ 2、注解配置(@WebFilter(“资源路径”))

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*") //配置方式一:注解配置
public class FilterDemo01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("监听器被访问了");

        filterChain.doFilter(servletRequest,servletResponse); //放行
    }

    @Override
    public void destroy() {

    }
}

3、过滤器细节:

​ 1、过滤器执行流程

​ step1:首先执行doFilter方法之上的代码:一般用作于增强request对象请求体的消息

​ step2:之后执行页面

​ step3:最后从doFilter方法下一行开始执行代码:一般用作与增强response对象响应体的消息

​ 2、生命周期方法

​ **init:**在服务器启动时,创建Filter对象,调用init方法,只会执行一次,一般用于加载资源

​ **doFilter:**每一次请求被拦截时,都执行一次,会执行多次,用于书写拦截的逻辑条件代码

​ **destroy:**服务器关闭后,Filter对象被销毁,如果服务器是被正常关闭,会调用destroy方法,只会执行一次,一般用

于释放资源

​ 3、配置详解

​ 1、拦截路径的配置:

​ 1、具体资源拦截:/xxx.jsp:只有访问指定资源时,才会被过滤

​ 2、目录拦截:/xxx/*:访问指定目录下的资源时,会被过滤

​ 3、后缀名拦截:*.xxx:访问指定格式的资源时,会被过滤

​ 4、所有拦截:/*:访问所有资源都会被过滤

​ 2、拦截方式的配置:资源被访问的方式

​ 1、注解配置:

@WebFilter(dispatcherTypes = DispatcherType.FORWARD)

​ 设置dispatcherTypes属性

​ 1、REQUESR:默认值。拦截浏览器直接请求的资源

​ 2、FORWARD:拦截转发访问的资源

​ 3、INCLUDE:拦截包含访问的资源

​ 4、ERROR:拦截错误跳转的资源

​ 5、ASYNC:拦截异步访问资源

​ 2、web.xml配置

<filter-mapping>
    <filter-name>Demo01</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

​ 设置dispatcherTypes标签

​ 1、REQUESR:拦截浏览器直接请求的资源

​ 2、FORWARD:拦截转发访问的资源

​ 3、INCLUDE:拦截包含访问的资源

​ 4、ERROR:拦截错误跳转的资源

​ 5、ASYNC:拦截异步访问资源

​ 4、过滤器链(配置多个过滤器)

​ 1、执行顺序:可以配置多个过滤器,就像一条直线,请求时从上到下依次执行拦截一、拦截二、……、拦截n,响应时原路返回,依次执行拦截n、……、拦截二、拦截一,且不会从头到尾执行拦截类的代码,请求时访问到diFilter会中断,随后响应时会接着doFilter继续执行

​ 2、过滤器优先级问题:

​ 1、注解配置的过滤器:

​ 按照类名,逐个字母进行比较,更小的先执行,之后停止比较,例如:aFilter和bFilter会先执行aFilter,Filter01和Filter02会先执行Filter01,因为逐个比较最后1比2小

​ 2、web.xml配置的过滤器:

​ 按<filter-mapping>标签的定义顺序,从上到下顺序执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值