web过滤器
过滤器是指拦截请求,并对传给被请求资源的ServletRequest或ServletResponse进行处理的一个对象。
过滤器可用于登录、加密和解密、对话检查、图片转换等待。过滤器可以配置拦截一个或者多个资源
1.Filter API
过滤器必须实现javax.servret.Filter接口,这个接口暴露三个生命周期方法:init,doFilter,destroy
当过滤器启动服务时,Servlet容器就会调用init方法。这个方法指调用一次
void init(FilterConfig filterConfig)
filterConfig可用于获取ServletContext对象,或者获取初始化属性(getInitParameter)
doFilter方法时过滤器核心
void doFilter(ServletRequest request ,ServletResponse response,FilterChain chain)
可以在ServletRequest 中添加属性,或者在ServletResponse添加一个标头
也可以获取HttpServletRequest对象
doFilter方法实现中的最后一行代码应该时调用FilterChain中的doFilter(request,response)方法
表示放行,通常会引发下一个过滤器被调用。
void destroy()
这个方法在过滤器即将终止服务之前,有servlet容器调用
2.过滤器的配置
确定要拦截哪些资源 (urlPatterns value)
要传给init方法的启动初始值(initParams) 可通过getParameterNames 和getParameter方法来获取
给过滤器七个名字(filterName)
可以通过@webFilter注解 和部署描述符中声明
下面通过三个实例来带你了解神秘的过滤器
实例一:日志过滤器
通过一个过滤器,用于在一个文本文件中记录请求的URI。从日志中 可以推断出一些有价值的信息,例如
应用程序中哪一项资源最受欢迎,获知网站每天哪个时间段的访问量最多
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax