《Java Web程序设计任务教程》简要复盘:第八章 Servlet的高级特性-Filter和Listener
作者:氯磷Rolin
目录:
- 第一章:网页开发基础(无)
- 第二章:Java Web概述
- 第三章:Servlet基础
- 第四章:请求与响应
- 第五章:会话及其会话技术
- 第六章:JSP技术
- 第七章:EL表达式和JSTL
- 第八章:Servlet的高级特性
- 第九章:JDBC
- 第十章:数据库连接池与DBUtils工具
- 第十一章:JSP开发模型
- 第十二章:文件的上传和下载
Filter 和 Listener 是Servlet规范中的两个高级特性,虽然他们并不处理客户端的请求,但是使用这两个高级特性可以轻松的解决一些特殊的问题。Filter用于对request和response对象进行修改,Listener用于对context、session、request事件进行监听
Filter 过滤器
Filter 概述
Filter 被称作过滤器,其功能就是对Web容器调用Servlet的过程进行拦截,从而在Servlet处理请求之前实现一些特殊功能。
-
主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理
-
在Servlet接受请求之前,做一些事情,如果不满足限定,可以拒绝进入Servlet
-
Filter过滤器实现的是javax.servlet.Filter接口的类
-
工作原理:
-
Filter的工作流程:
http请求首先进入filter,执行相关业务逻辑
若判定通行,则进入Servlet逻辑,Servlet执行完毕之后,又返回Filter,最后在返回给请求方
判定失败,直接返回,不需要将请求发给Servlet -
使用场景:
- 在filter层,来获取用户的身份
- 可以考虑在filter层做一些常规的校验(如参数校验,referer校验等)
- 可以在filter层做稳定性相关的工作(如全链路打点,可以在filter层分配一个traceId;也可以在这一层做限流等)
由于Filter过滤器实现了javax.servlet.Filter接口,其中定义了三个方法,具体如下:
方法声明 | 功能描述 |
---|---|
init (FilterConfig filterConfig) | 用来初始化过滤器,可以在其中完成于构造方法类似的初始化功能 |
doFilter (ServletRequest req , ServletResponse resp ,FilterChain chain) | 参数req和resp为Web服务器或者上一个Filter传递过来的请求响应对象;参数chain代表当前Filter链的对象,在当前Filter对象中的doFilter()方法内部需要调用chain.doFilter() 才能将请求交付下一环节 |
destroy() | 在卸载Filter对象时调用该方法,可以将关闭数据库和IO流的方写在此处 |
其中init()
和destroy()
方法都只会调用一次,而doFilter()
方法只要有客户端请求时就会被调用,并且他的所有工作都集中于doFilter()
方法中
Filter的映射
过滤器程序与Servlet程序类似,同样需要在web.xml文件中进行配置,从而设置他所能拦截的资源。
映射配置
Filter的配置与Servlet类似,具体配置代码如下:
<