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 直接实现监听器 的接⼝。