什么是过滤器
servlet容器调用servlet的过程中,进行拦截
客户端与服务器之间的一道过滤技术
过滤器的作用
在servlet之前,先经过Filter,在到达servlet;响应时,反向执行
解决servlet代码冗余问题(如乱码处理、登录验证)
编写过滤器
一个Java类实现Filter接口,doFilter()中编写逻辑代码
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
//编写拦截逻辑代码
System.out.println("-----MyFilter-----");
//让请求到达servlet,请求继续
chain.doFilter(request, response);
//响应拦截
System.out.println("------end-------");
}
过滤器的两种配置
1.注解配置
@WebFilter(value ="/t")//value指定要拦截的资源
2.xml配置(类似于servlet的配置)
<filter>
<filter-name>过滤器名字</filter-name>
<filter-class>过滤器类全称(包名.类名)</filter-class>
</filter>
<filter-mapping>
<filter-name>过滤器名字</filter-name>
<url-pattern>需要过滤的对象(路径)</url-pattern>
</filter-mapping>
过滤器的三种拦截路径
1.精准拦截:/xxx.jsp /XXServlet
2.后缀拦截:如: *.jsp
3.通配符拦截
/* 拦截所有
过滤器链和优先级
一组过滤器(多个过滤器),称为过滤器链
有下一个过滤器,自动执行
如果为注解配置则按类全名称字符串顺序决定作用顺序 (字母排序)
如果为web.xml配置,则按照filter-mapping注册顺序
web.xml配置高于注解配置
如果同时配置xml和注解配置,则会造成创建多个过滤器对象,过滤多次
过滤器的生命周期
1.创建(1.利用向导生成 2.实现Filter类)
2.初始化 init()方法 FilterConfig
3.过滤 doFilter()方法
4.销毁 destroy()方法