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 {
    /* 内部代码 略 */
}
相关推荐
192263816 小时前
基于LabVIEW的转子故障诊断系统:振动信号里的秘密探寻
servlet
精神病不行计算机不上班19 小时前
[Java Web]在IDEA中完整实现Servlet的示例
java·servlet·tomcat·html·intellij-idea·web
精神病不行计算机不上班21 小时前
[Java Web]Java Servlet基础
java·前端·servlet·html·mvc·web·session
好学且牛逼的马1 天前
HttpServlet 深度拆解:从设计模式看透其核心原理
java·servlet·设计模式
BD_Marathon3 天前
【JavaWeb】请求转发
servlet
cike_y3 天前
JavaWeb之过滤器Filter&监听器
java·servlet·javaweb
BD_Marathon4 天前
【JavaWeb】HttpServletRequest_获取请求行和请求头
servlet
BD_Marathon4 天前
【JavaWeb】Servlet_url-pattern的一些特殊写法问题
java·开发语言·servlet
BD_Marathon4 天前
【JavaWeb】Servlet_jar包导入和Content-Type问题
java·servlet·jar
梦想的旅途25 天前
媒体文件(图片/文件)的上传与管理:获取 Media ID 的技术细节
前端·http·servlet