过滤器和监听器

本文深入解析Servlet中的过滤器(Filter)与监听器的作用及实现方式。过滤器用于预处理用户请求和后处理响应,可通过实现javax.servlet.Filter接口自定义。监听器则用于监控web应用中的特定事件,如ServletContext、HttpSession和ServletRequest的生命周期变化。
摘要由CSDN通过智能技术生成

1. 主要内容

在这里插入图片描述

过滤器

介绍
Filter 即为过滤,⽤于在 Servlet 之外对 Request 或者 Response 进⾏修改。它主要⽤于对⽤户请求
进⾏预处理,也可以对 HttpServletResponse 进⾏后处理。使⽤ Filter 的完整流程: Filter 对⽤户请求
进⾏预处理,接着将请求交给 Servlet 进⾏处理并⽣成响应,最后 Filter 再 对服务器响应进⾏后处理。
在⼀个 web 应⽤中,可以开发编写多个 Filter,这些 Filter 组合 起来称之为⼀个 Filter 链。

                                                                  **单个过滤器**

在这里插入图片描述
多个过滤器

在这里插入图片描述
若是⼀个过滤器链:先配置先执⾏(请求时的执⾏顺序);响应时: 以相反的顺序执⾏。
在 HttpServletRequest 到达 Servlet 之前,拦截客户的 HttpServletRequest 。根据需要检查
HttpServletRequest,也可以修改 HttpServletRequest 头和数据。
在HttpServletResponse 到达客户端之前,拦截 HttpServletResponse。根据需要检查
HttpServletResponse,也可以修改 HttpServletResponse头和数据。
实现
可以通过实现⼀个叫做javax.servlet.Fileter的接⼝来实现⼀个过滤器,其中定义了 三个⽅法,init(),doFilter(), destroy()分别在相应的时机执⾏。后期观察⽣命周期。
Filter 的实现只需要两步:
Step1: 编写 java 类实现 Filter 接⼝,并实现其 doFilter ⽅法。
Step2: 通过@WebFilter注解设置它所能拦截的资源。

@WebFilter("/*")
public class Filter01 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
 }
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain) throws IOException, ServletException
{
 }
@Override
public void destroy() {
 }
}

Filter 接⼝中有⼀个 doFilter ⽅法,当开发⼈员编写好 Filter,并配置对哪个 web 资源进⾏拦截后,
Web 服务器每次在调⽤ web 资源的 service ⽅法之前,都会先调⽤⼀下 filter 的 doFilter ⽅法。因此可
以达到如下效果:
调⽤⽬标资源之前,让⼀段代码执⾏。
是否调⽤⽬标资源(即是否让⽤户访问 web 资源)。
web 服务器在调⽤ doFilter ⽅法时,会传递⼀个 filterChain 对象进来,filterChain 对象是 filter 接
⼝中最重要的⼀个对象,它提供了⼀个 doFilter ⽅法,开发⼈员可以根据需求决定 是否调⽤此⽅法,
调⽤该⽅法,则 web 服务器就会调⽤ web 资源的 service ⽅法,即 web 资源就会被访问,否则 web
资源不会被访问。(本质是放⾏,调⽤doFilter⽅法后,即请求可以到达资源)

监听器

介绍
web 监听器是Servlet 中⼀种的特殊的类,能帮助开发者监听 web 中的特定事件, ⽐如
ServletContext,HttpSession,ServletRequest 的创建和销毁;变量的创建、销毁和修改等。 可以在
某些动作前后增加处理,实现监控。例如可以⽤来统计在线⼈数等。
实现
监听器有三类8种:
⑴ 监听⽣命周期:
ServletRequestListener
HttpSessionListener
ServletContextListener
⑵ 监听值的变化:
ServletRequestAttributeListener
HttpSessionAttributeListener
ServletContextAttributeListener
⑶ 针对 session 中的对象:
监听 session 中的 java 对象(javaBean) ,是 javaBean 直接实现监听器 的接⼝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值