当前位置: 首页 > news >正文

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 {@Overridepublic 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;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {reqEncode =  filterConfig.getInitParameter("reqEncode");respEncode = filterConfig.getInitParameter("respEncode");}@Overridepublic 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 --->欢迎大家和博主讨论问题 


http://www.mrgr.cn/news/7368.html

相关文章:

  • 从redis的set中随机取出一个元素,并且不做删除
  • 2024易航php加密平台PHP网站源码
  • 音视频封装格式之FLV
  • 2024年最新最全面的软件测试自动化面试题
  • 如何构建基于Vue的HSK学习平台?揭秘高效中文学习工具的开发
  • AMBA总线协议与PCIe总线协议的区别
  • 为什么最近多模态大模型工作中用Q-Former结构的变少了?
  • react如何解决setTimeout获取不到最新数据问题
  • unoredered_mapunordered_set封装
  • Python函数式编程实践:让代码更加优雅简洁
  • OpenCV几何图像变换(9)仿射变换函数warpAffine()的使用
  • UGUI空白可点击组件,减少重绘
  • 一拖二快充线市场需求 - LDR6020
  • VulnStack1-内网渗透记录
  • linux自定义命令
  • Python单例模式:深入解析与应用
  • 基于x86 平台opencv的图像采集和seetaface6的人脸检测功能
  • 软件工程造价师习题练习 16
  • C语言内存函数
  • 本地Docker部署开源Web相册图库Piwigo与在线远程访问实战方案