过滤器的作用及用法

过滤器

什么是过滤器

过滤器是Servlet的高级特性之一,实现的是Filter接口的Java类

首先我们应该清楚过滤器所处的位置,即过滤器作用的位置,可以简单看一下下图:
在这里插入图片描述
通过此图可以看出,当浏览器发送请求给服务器的时候,先执行过滤器,然后才访问Web的资源。服务器响应Response,从Web资源抵达浏览器之前,也会途径过滤器。
简单理解,就可以把过滤器看成一张滤网,只有符合过滤条件才能通过过滤器到达下一步需要执行的步骤。
这就不难理解为什么我们有时的某些访问请求会被拒绝——当需要限制用户访问某些资源时、在处理请求时提前处理某些资源、服务器响应的内容对其进行处理再返回、我们就是用过滤器来完成的!


过滤器的作用

过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。
浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉。
过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中还要进行相应的操作。

例:字符编码转换

request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

这是在Servlet里面设置字符编码的代码,但是通常情况下Servlet不止一个,所以我们需要在每一个Servlet中都写上上面的代码,这样的话,不仅麻烦,而且容易搞混淆。

所以我们对于这类多个Servlet中会执行相同的代码的时候,我们通常可以使用过滤器来帮我们完成操作。


过滤器的用法

如果想要使用过滤器,首先需要实现Filter类,并重写三个需要的方法:


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

@WebFilter(filterName = "TestFilter2",urlPatterns = "/*")
public class TestFilter2 implements Filter {
    public void init(FilterConfig config) throws ServletException {

    }
    
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        chain.doFilter(req, resp);
    }
    
    public void destroy() {
    }

}

init方法:    容器在创建当前过滤器的时候自动调用;

destroy方法:  容器在销毁当前过滤器的时候自动调用

doFilter方法:  过滤器的主要代码写在这个地方

在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:
在这里插入图片描述
如果有多个过滤器时,根据在在web.xml文件里中中写的过滤器顺序执行。
注意:如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter。

  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤妄的Devil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值