JavaWeb三大组件之Filter学习

1.Filter是什么

首先,Filter与Servlet非常相似,都有三个生命周期方法、都是实现了各自接口的java类。不同点在于servlet主要负责处理请求,而filter主要负责拦截请求和放行。

Filter: 过滤器。 实质上就是实现了接口Filter的一个java类,不需要将它想象的过于复杂。

可以将其想象为生活中的一些例子。我认为最为贴切的就是坐飞机了,我们相当于来自浏览器的请求,检票员相当于Filter,是否能上飞机就相当于是否能访问服务器的资源。当我们的机票符合要求时,我们就可以顺利的坐上飞机。Filter的作用与之类似。


2.为什么要用Filter

1.统一编码。 浏览器通过http请求发送数据给Servlet,如果存在中文,就必须指定编码,否则就会乱码!
2. 敏感字符过滤。 就比如王者荣耀在对局时,如果你发一些不良的言论,系统会将敏感字符替代。如:你 ** 就是个 **
3. 资源访问限制。 限制用户访问某些资源时、在处理请求时提前处理某些资源、服务器响应的内容对其进行处理再返回。

好处:

  • 减少代码的重用性。如:不需要在每一个Servlet中都指定编码
  • 用户资源访问限制。

3.Filter怎么用

步骤:

  1. 定义一个类,实行接口 Filter,部署到web中。
  2. 重写类中的方法。
  3. 配置拦截路径。
    • web.xml
    • 注解

写一个简单的过滤器

public class FilterDemo1 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {

        //放行语句,作用:让下一个过滤器执行或访问目标资源。
        chain.doFilter(req,resp);
    }

    @Override
    public void destroy() {}
}

配置拦截路径:

  • 方法一,通过web.xml。
<filter>
             <filter-name>FilterDemo1</filter-name>
             <filter-class>cn.itcast.filter.FilterDemo1</filter-class>
</filter>

<filter-mapping>
	        <filter-name>FilterDemo1</filter-name>
			<!-- 拦截路径 -->
	        <url-pattern> /* </url-pattern>
</filter-mapping>
  • 方法二,通过注解
    @WebFilter(filterName = "FilterDemo1",urlPatterns = "/*")

可以简写为:

    @WebFilter("/*")

4.Filter细节

4.1执行流程

  1. 执行过滤器
  2. 执行放行后的资源
  3. 回来执行过滤器放行代码下边的代码

4.2生命周期方法

  1. init: 在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
  2. doFilter: 每一次请求被拦截资源时,会执行。执行多次
  3. destroy: 在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

4.3过滤器配置详解

  • 拦截路径配置。

    1. /* 拦截所有资源 。 访问所有资源时,过滤器都会被执行。
    2. /user/* 拦截目录。 问/user下的所有资源时,过滤器都会被执行。
    3. /index.jsp 具体资源路径。 只有访问index.jsp资源时,过滤器才会被执行。
    4. *.jsp 后缀名拦截。 访问所有后缀名为jsp资源时,过滤器都会被执行。
  • 拦截方式配置。(资源被访问的方式)

    注解配置:设置dispatcherTypes属性

    1. REQUEST:默认值。浏览器直接请求资源
    2. FORWARD:转发访问资源
    3. INCLUDE:包含访问资源
    4. ERROR:错误跳转资源
    5. ASYNC:异步访问资源

5.过滤器链

概念: 请求访问服务器资源时,配置多个过滤器。

问题: 配置多个过滤器时,过滤器执行的先后顺序是按什么规律的?

问题探究: 配置两个过滤器并且资源拦截路径相同,进行实验。

实验结果:
在这里插入图片描述

画图更好的描述出这样一个过程。
在这里插入图片描述

结论: 过滤器先后顺序是按照类名的字符串比较规则比较,值小的先执行。如 FilterDemo3 和 FilterDemo4 ,字符串末尾 3 < 4,所以先执行过滤器FilterDemo3。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值