IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Filters-Servlets(四) -> 正文阅读

[系统运维]Filters-Servlets(四)

概述

Filter是拦截Request请求的对象:在用户的请求访问资源前处理ServletRequest以及ServletResponse,它可用于日志记录、加解密、Session检查、图像文件保护等。通过Filter可以拦截处理某个资源或者某些资源。Filter的配置可以通过Annotation或者部署描述来完成。当一个资源或者某些资源需要被多个Filter所使用到,且它的触发顺序很重要时,只能通过部署描述符来配置。

Filter API

接下来主要介绍Filter相关的接口,包含Filter、FilterConfig、FilterChain。
Filter的实现必须继承javax.servlet.Filter接口。这个接口包含了Filter的3个生命周期:init、doFilter、destroy。
Servlet容器初始化Filter时,会触发Fiter的init的方法,一般来说是在应用开始时。也就是说,init方法并不是在该Filter相关的资源使用到时才初始化(并非懒加载),而且这个方法只调用一次,用于初始Fiter。init方法的定义如下:

void init(FilterConfig filterConfig);

注意:FilterConfig实例是有Servlet容器传入init方法中的。FilterConfig将在后面章节讲解。
当Servlet容器每次处理Filter相关的资源时,都会调用该Filter实例的doFilter方法。Filter的doFilter方法包含ServletRequest、ServletResponse、FilterChain这3个参数。

void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain);

接下来,说明一下doFilter的实现中访问ServletRequest、ServletResponse。这也就意味着允许给ServletRequest增加属性或者增加Header。当然也可以修饰ServletRequest或者ServletResponse来改变它们的行为。
在Filter的doFilter的实现中,最后一行需要调用FilterChain中的doChain方法。注意doFilter方法里的第3个参数,就是filterChain的实例:

filterChain.doFilter(request, response);

一个资源可能需要被多个Filter关联到(更专业一点来说,这应该叫做Filter链条),这时Filter.doFilter()的方法将触发Filter链条中下一个Filter。只有在Filter链条中最后一个Filter里调用Filer.doFilter(),才会触发处理资源的Controller方法。
如果在Filter.doFilter()的实现中,没有在结尾处调用FilterChain.doFilter()的方法,那么该Request请求中止,后面的处理就会中断。
注意:FilterChain接口中,唯一的方法就是doFilter。该方法与Filter中的doFilter的定义是不一致的:在FilterChain中,doFilter方法只有两个参数,但在Filter中,doFilter方法有三个参数。
Filter接口中,最后一个方法时destroy,它的定义如下:

void destroy();

该方法在Servlet容器要销毁Filter时触发,一般在应用停止的时候进行调用。
除非Filter在部署描述中被多次定义到,否则Servlet窗口只会为每个Filter创建单一实例。由于Servlet/JSP的应用通常要处理用户并发请求,此时Filter实例需要同时被多个线程所关联到,因此需要非常小心的处理多线程问题。

Filter配置

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:25:39  更:2021-12-07 12:28:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:46:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码