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 {
    /* 内部代码 略 */
}
相关推荐
ajsbxi17 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
记录成长java1 天前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
长安初雪1 天前
Request 和 Response 万字详解
计算机网络·servlet
A-bodgie1 天前
Spring 中的 Environment 对象
java·后端·spring·servlet·springboot
笔墨登场说说3 天前
JDK 里面的线程池和Tomcat线程池的区别
java·servlet·tomcat
听潮阁3 天前
【SpringCloud详细教程】-01-一文了解微服务
开发语言·spring boot·spring cloud·servlet·java-ee·mybatis
阑梦清川4 天前
JavaEE初阶-----servlet-api,Maven创建项目,部署,打包,测试全过程
servlet·java-ee·maven
阑梦清川4 天前
JavaEE初阶--servlet篇(三)HttpServlet/response/request对应方法使用
java·servlet·java-ee
awonw4 天前
[java][基础]HTTP&Tomcat&Servlet
java·http·servlet·tomcat
长安初雪5 天前
Servlet 3.0 注解开发
servlet