JavaEE----Servlet过滤器

前言

在现代Web开发中,Servlet技术是Java EE(Jakarta EE)的核心部分。随着Web应用复杂性的增加,Servlet过滤器(Filter)提供了一种灵活的方法来对请求和响应进行处理

Servlet过滤器是一种特殊的Java对象,能够在请求到达Servlet之前和响应返回给客户端之前进行拦截。它们用于多种场景,包括请求和响应的修改、日志记录、身份验证与授权、性能监控及跨域请求处理等。通过使用过滤器,开发者能轻松地实现通用功能,提升应用的安全性、可维护性和性能

过滤器具有轻量级和可重用的特点,支持全局和精细配置,使得它们在不同的Servlet之间共享功能。总之,Servlet过滤器在Web应用开发中发挥着重要作用,值得深入研究与应用

概念

   Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过 Filter技术,对web服务器管理的所有web资源:例如Servlet, 从而实现一些 特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信 息等一些高级功能

作用:过滤器是JavaEE规范中定义的一种技术,可以让请求到达目标Servlet之前,先进到过滤器中,在过滤器中统一进行一些拦截处理,当处理完成后,可以继续向后执行,到达目标Servlet,如果配置了多个过滤器,也可以进入到下一个过滤器

  1. 过滤器用来实现通用功能,减少代码的冗余,提高可维护性
  2. 一个过滤器可以配置多个资源使用
  3. 一个资源也可以配置多个过滤器,按照配置顺序调用

过滤器使用的场景

  1. 统一编码过滤
  2. 权限验证
  3. 跨域过滤

过滤器的配置

  1. 实现过滤器接口
  2. 编写过滤器代码
  3. 注册过滤器
  4. 配置过滤器过滤对象

第一步:实现接口

  1. 实现Filter接口
  2. 重写doFilter方法

第二步:编写代码

作用:统一数据传输的格式

public class EncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("编码过滤器");
        //设置请求编码集
        servletRequest.setCharacterEncoding("utf-8");
        //设置响应编码集
        servletResponse.setContentType("text/html;charset=utf-8");
        //让请求离开过滤器,继续向下执行
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

第三步:注册过滤器

在Servlet文件中web.xml中配置

注册过滤器

第四步:配置对象

 注:  过滤器名字必须和你所需过滤器一致  

重:现在配置过滤器一般不在web.xml文件中配置(最原始的方法),现在配置如下

在过滤器中一般不直接把值写在java代码中(例如上面的"utf-8"),因为在Maven打包后就变成.class文件无法修改.

我们一般将值配置在web.xml文件中(web.xml文件在maven打包后依旧可以修改)

示例:

过滤器代码:

public class EncodingFilter implements Filter {

    String reqEncode = null;
    String respEncode = null;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
       reqEncode =  filterConfig.getInitParameter("reqEncode");
       respEncode = filterConfig.getInitParameter("respEncode");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("编码过滤器");
        //设置请求编码集
        servletRequest.setCharacterEncoding(reqEncode);
        //设置响应编码集
        servletResponse.setContentType(respEncode);
        //让请求离开过滤器,继续向下执行
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

 



     感谢大家的观看,本次分享就到这里。希望我的内容能够对您有所帮助。创作不易,欢迎大家多多支持,您的每一个点赞都是我持续更新的最大动力!如有不同意见,欢迎在评论区积极讨论,让我们一起学习、共同进步!如果有相关问题,也可以私信我,我会认真查看每一条留言。期待下次再见!

                                       希望路飞的笑容可以治愈努力路途中的你我!

博主vx:Dreamkid05 --->欢迎大家和博主讨论问题 

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值