1.过滤器概念
过滤器能够对Servlet容器的请求和响应对象进行检查和修改
Servlet过滤器本身不生成请求和响应对象,只提供 过滤 作用
在Servlet被调用之前,检查Request对象,修改Request Header和Request内容
在Servlet被调用之后,检查Response对象,修改Response Header和Response内容。
Servlet过滤器负责过滤的Web组件,可以是Servlet、JSP或HTML
Filter接口
所有Servlet过滤器类,必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法
init(FilterConfig):这个方法是过滤器的初始化方法。Servlet容器创建Servlet过滤器实例后,调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数
##doFilter(ServletRequest,ServletResponse,FilterChain):完成实际的过滤操作。当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器。(FilterChain[过滤器链]是接口,是一个对象)
destroy():销毁过滤器实例前,调用这个方法,释放Servlet过滤器占用的资源
2.过滤器工作过程
3.创建Servlet过滤器的方法
4.发布Servlet过滤器的方法
5.程序示例
(1)创建NoteFilter过滤器,可以拒绝列在黑名单上的客户访问留言簿.新建文件夹filter。与session文件夹中的代码相比较
login.jsp——代码不变
MyLoginServlt.java——代码不变,因为这个Servlet就是用来判断用户角色
index.jsp——把判断用户是否登录的session部分代码去掉,查询和修改链接改为MyQuery和MyUpdate
LoginFilter.java
配置web.xml文件
/* 表示过滤当前应用中的所有请求
直接执行程序,访问filter/login.jsp时,页面是空白,控制台输出“doFilter invoked”,原因在于,FilterChain对象调用后续资源,所以继续编写LoginFIlter.java
MyQueryServlet.java
MyUpdateServlet.java
6.程序示例,使用filter进行对于敏感词的处理
comment.jsp
CommentFilter.java
CommentServlet.java
commentResult.jsp
web.xml——过滤后缀名是CommentServlet的组件
7.过滤器链,串联过滤器工作过程
info.jsp
InfoServlet.java
infoResult.jsp
MyFilter1.java
MyFilter2.java
web.xml
执行结果: