Java Servlet Filter过滤器概述

Filter是Servlet的过滤器,是Servlet 2.3规范中新增加的一个功能,主要用于完成一些通用的操作,如编码的过滤、判断用户的登录状态等。

在现实生活中,人们可以使用污水净化设备对水源进行过滤净化。同样,在程序中人们也可以使用 Filter 对请求和响应信息进行过滤。

Filter 被称为过滤器,其主要作用是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊功能。Filter 在 Web 应用中的拦截过程如图 1 所示。

图 1 Filter拦截过程

在图 1 中,当用户通过浏览器访问服务器中的目标资源时,首先会被 Filter 拦截,在 Filter 中进行预处理操作,然后再将请求转发给目标资源。当服务器接收到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要将响应结果经过滤器处理后,才发送给客户端。

本质上,Filter 过滤器就是一个实现了 javax.servlet.Filter 接口的类,在 javax.servlet.Filter 接口中定义了三个方法,如表 1 所示。

表 1 Filter 接口中的方法

方法声明

功能描述

init(FilterConfig filterConfig)

方法用于初始化过滤器,开发人员可以在 init() 方法中完成与构造方法类似的初始化功能,如果初始化代码中要使用到 FillerConfig 对象,那么,这些初始化代码就只能在 Filler 的 init() 方法中编写,而不能在构造方法中编写

doFilter(ServletRequest request,SeivletResponse response, FilterChain chain)

doFilter()方法有多个参数,其中,参数 request 和 response 为 Web 服务器或 Filter 链中的上一个 Filter 传递过来的请求和响应对象;

参数 chain 代表当前 Filter 链的对象,只有在当前 Filter 对象中的 doFilter() 方法内部需要调用 FilterChain 对象的 doFilter() 方法,才能把请求交付给 Filter 链中的下一个 Filter 或者目标程序处理

destroy()

destroy()方法在 Web 服务器卸载 Filter 对象之前被调用,该方法用于释放被 Filter 对象打开的资源,例如关闭数据库和 I/O 流

表 1 中的三个方法都是可以表现 Filter 生命周期的方法,其中 init() 方法在 Web 应用程序加载时会被调用,destroy() 方法在 Web 应用程序卸载(或关闭)时被调用,这两个方法都只会被调用一次,而 doFilter() 方法会被调用多次(只要客户端有请求时就会被调用),Filter 所有的工作集中在 doFilter() 方法中。

java nodefilter类,Java Servlet Filter过滤器概述相关推荐

  1. java.lang.ClassNotFoundException: javax.servlet.Filter

    java.lang.ClassNotFoundException: javax.servlet.Filter:有两个原因:(1)在maven中的作用域,不能是provided,需要是compile就是 ...

  2. Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法

    Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法 一.概述 在java集合中,常用ArrayList类中,若需要 ...

  3. Java文件类– java.io.File

    Java File class is at the center of Java IO operations. Java File类是Java IO操作的中心. Java文件类 (Java File ...

  4. java web三大组件之filter过滤器

    过滤器是java web中相当重要的组成成分,是JavaWeb三大组件之一,它与Servlet很相似.不过过滤器有以下三条特性: 过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servle ...

  5. java 正则 pattern 线程安全_(一)Java Pattern类----java正则

    记下一些知识..... Java Pattern类 Pattern在java.util.regex包中,是正则表达式的编译表示形式,此类的实例是不可变的,可供多个并发线程安全使用. 定义 public ...

  6. Java常用类——Java教案(六)

    文章目录 1. 与用户互动 Java程序入口 键盘录入 字符串录入 long类型录入 读取文件 next和nextline的区别 nextline使用时,自动跳过的问题. 2. 系统相关 System ...

  7. java工具类-java实现 生成圆头像

    1.创建RoundHeadImgUtils工具类 package com.mrd.utils;import javax.imageio.ImageIO; import java.awt.*; impo ...

  8. java工具类-java仿微信九宫格头像

    创建Utils类 ImageUtil package com.mrd.utils;import javax.imageio.ImageIO; import java.awt.Color; import ...

  9. java scanner 教程,Java Scanner 类 - Java 入门教程

    一直以来,我们都使用 System.out.println() 方法向屏幕打印内容,那么如何接收输入的内容呢?本小节所学习的 Scanner 类就可以实现对输入内容的接收.在本小节,我们将学习 Sca ...

最新文章

  1. P2642 双子序列最大和(线性DP)(最大子段和 + 合唱队列)
  2. C# winform版 nbtstat
  3. COGS-930-找第k小的数-HNOI2012-主席树
  4. LVS(8)——tcpdump查看数据包到底如何传递
  5. Linux-Android启动之Machine-Init函数
  6. 在线普通话转粤语发音_香港最新悬疑侦探剧福尔摩师奶,粤语知识好难
  7. 你不懂js系列学习笔记-异步与性能- 02
  8. (蓝桥杯)2018JAVA B组 日志分析
  9. [转]如何设置win7一直以管理员身份运行
  10. 班扎古鲁白玛的沉默(见与不见)
  11. idea 包存在提示不存在
  12. 一种解决各种 macos unlocker 无法下载 Darwin.iso 的方法
  13. python画满天星_跟我学解Python题-海龟制图满天星
  14. 常见系统故障修复(二)——修复GRUB引导故障
  15. (专升本)PowerPnt(幻灯片放映、演示文稿放映)
  16. windows server2012软路由
  17. Google入股百度!
  18. GridView控件 Image控件 与图片的二进制数据库存储和显示
  19. C#怎么修改生成的EXE文件图标
  20. Pandas数据分析实战1——淘宝粽子行业分析

热门文章

  1. JavaScript 基础(十三):Window对象
  2. Ansible 起步指南
  3. Tomcat软连接访问配置(symbol link)
  4. SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析
  5. 选择用户-显示已选用户
  6. gem install 和 bundle 区别
  7. UNDO 表空间管理
  8. jsp与php学哪个2015年,PHP和jsp哪个好学呢?
  9. 怎么让打印出来表格的纸下面显示页数_4个使用频率较高的Excel打印技巧,办公室打印文件时常常会用到!...
  10. vuejs页面跳转_【Vue 学习】 VueJS 生命周期