JavaWeb 18.过滤器

目录

一、过滤器概述

生活举例:公司前台,停车场安保系统,地铁检票闸机

过滤器开发中应用场景

过滤器工作位置图解

Filter接口API:

二、过滤器过滤过程图解

三、过滤器生命周期

四、过滤器链的使用

工作流程图解

注解方式配置过滤器

XML方式配置

注解方式配置过滤器


生命的意义却似轮回

每个人都得从头寻找

唯在这寻找中才可能与前贤汇合

若在山腰止步

登峰之路岂不又被埋没?

------ 24.10.13

一、过滤器概述

Filter,即过滤器,是JavaEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是JavaWeb项目中最为实用的技术之一

Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口

filter的工作位置是项目中所有目标资源之前,容器在创建HtpServletRequest和

HtpServletResponse对象后,会先调用Filter的doFilter方法

Filter的doFilter方法可以控制请求是否继续,如果放行,则请求继续,如果拒绝,则请求到此为止,由过滤器本身做出响应

Filter不仅可以对请求做出过滤,也可以在目标资源做出响应前,对响应再次进行处理

Filter是GOF中责任链模式的典型案例

Filtler的常用应用包括但不限于::登录权限检查、解决网站乱码、过滤敏感字符,日志记录,性能分析........


生活举例:公司前台,停车场安保系统,地铁检票闸机

公司前台对来访人员进行审核,如果是游客则拒绝进入公司,如果是客户则放行,客户离开时提醒客户不要遗忘物品

停车场保安对来访车辆进行控制,如果没有车位拒绝进入,如果有车位,发放停车卡并放行,车辆离开时收取停车费

地铁验票闸机在人员进入之前检查票,没票拒绝进入,有票验票后放行,人员离开时同样验票


过滤器开发中应用场景

① 日志的记录 ② 性能的分析 ③ 乱码的处理

④ 事务的控制 ⑤ 登录的控制 ⑥ 跨域的处理

......


过滤器工作位置图解


Filter接口API:

初始化方法,由容器调用并传入初始配置信息 filterConfig 对象

java 复制代码
default public void init(FilterConfig filterConfig)

过滤方法,核心方法,过滤请求,决定是否放行响应之前的其他处理等都在该方法中

java 复制代码
public void doFilter(ServletRequest request,
 ServletResponse response, FilterChain chain)

销毁方法,容器在回收过滤器对象之前调用的方法

java 复制代码
default public void destroy();

二、过滤器过滤过程图解


三、过滤器生命周期

过滤器作为web项目的组件之一,和Servlet的生命周期类似,略有不同,有servlet的load-on- startup的,默认就是系统启动立刻构造。

阶段 对应方法 执行时机 执行次数

创建对象 构造器 web应用启动时 1

初始化方法 void init(FilterConfig filterConfig) 构造完毕 1

过滤请求 void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain) 每次请求 多次

销毁 default void destroy() web应用关闭时 1


四、过滤器链的使用

一个web项目中,可以同时定义多个过滤器,多个过滤器对同一个资源进行过滤时,工作位置有先后,整体形成一个工作链,称之为过滤器链

过器中的过滤器的顺序由 filter-mapping 顺序决定;

每个过滤器过滤的范围不同,对同一个资源来说,过过滤器中的过滤器个数可能是不同的;

如果某个Filter是使用ServletName进行匹配规则的配置,那么这个 Filter 执行的优先级要更低


工作流程图解


注解方式配置过滤器

XML方式配置

XML 复制代码
 <!--配置filter,并为filter起别名-->
 <filter>
     <filter-name>loggingFilter</filter-name>
     <filter-class>com.atguigu.filters.LoggingFilter</filter-class>
     <!--配置filter的初始参数-->
     <init-param>
         <param-name>dateTimePattern</param-name>
         <param-value>yyyy-MM-dd HH:mm:ss</param-value>
     </init-param>
 </filter>

 <!--为别名对应的filter配置要过滤的目标资源-->
 <filter-mapping>
     <filter-name>loggingFilter</filter-name>
     <!--通过映射路径确定过滤资源-->
     <url-pattern>/servletA</url-pattern>
     <!--通过后缀名确定过滤资源-->
     <url-pattern>*.html</url-pattern>
     <!--通过servlet别名确定过滤资源-->
     <servlet-name>servletB ame</servlet-name>
 </filter-mapping

注解方式配置过滤器

java 复制代码
@WebFilter(
    filterName = "loggingFilter",
    initParams = { @WebInitParam(name="dateTimePattern",value="yyyy-MM-dd 
HH:mm:ss")},
    urlPatterns = {"/servletA","*.html"},
    servletNames = {"servletBName"}
 )
public class LoggingFilter  implements Filter {
    /* 内部代码 略 */
}
相关推荐
2301_801252221 天前
Servlet 的 URLPattern配置
servlet
残花月伴1 天前
天机学堂——day1(修改bug)
servlet·bug
Archy_Wang_12 天前
ASP.NET Core 应用的零停机部署策略
后端·servlet·asp.net
linmengmeng_13144 天前
【Jenkins】Jenkins配置从节点 - Launch Agent
运维·servlet·jenkins
musenh5 天前
servlet入门
servlet
wfsm6 天前
flowable使用01
java·前端·servlet
六件套是我7 天前
redission实现延时队列
android·java·servlet
非典型代码8 天前
Jenkins发不出邮件
运维·servlet·jenkins
佐杰9 天前
Jenkins安装部署
运维·servlet·jenkins
chxii9 天前
Spring Boot 中,内嵌的 Servlet 容器(也称为嵌入式 Web 服务器)
spring boot·servlet