1.基本概念
过滤器
(Filter)是服务器与客户端请求与响应的中间层组件,在实际项目开发中过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的的请求再转给下一个资源。与其他web应用程序组件不同的是,过滤器采用了“链”的方式进行处理。当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器完成。
2.特点
- Servlet过滤器可能检查和修改ServletRequest和ServletResponse对象
- 可以指定Servlet过滤器和特定的URL关联,只有当客户请求访问此URL时,才会触发该过滤器工作
- 多个Servlet过滤器可以被串联起来,形成管道效应,协同修改请求和响应对象
- 所有支持Java Servlet规范2.3的Servlet容器,都支持Servlet过滤器
3.作用
(1)在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest ;根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
(2) 在HttpServletResponse 到达客户端之前,拦截HttpServletResponse ;根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。
4.工作原理
过滤器是一个可插入的自由组件,也就是说客户端和服务器之间可以插入过滤器的个数是可选的,当插入多个过滤器时,就形成过滤链。客户端浏览器在访问web服务器的某个具体资源的时候,请求经过过滤器1,过滤器1将code1代码块进行相关处理之后,再将请求传递给过滤链中的下一个过滤器2,(过滤器的执行顺序以配置文件中配置的顺序为准)过滤器2处理完之后,request就传递的Servlet完成相应的逻辑。这个请求在通过过滤链并被服务器处理之后,一个响应将以相反的顺序通过该链发送回去。这样,请求和响应都得到了处理。
5.过滤器的创建过程
- 实现javax.servlet.Filter接口
- 实现init方法,读取过滤器的初始化参数
- 实现doFilter方法,完成对请求或响应的过滤
- 调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应
过滤器的默认代码如下:
package com.dlj.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
* Servlet Filter implementation class DemoFilter
*/
@WebFilter("/DemoFilter")
public class DemoFilter implements Filter {
/**
* Default constructor.
*/
public DemoFilter() {
//构造方法
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
//过滤器销毁
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//执行过滤操作
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
//过滤器初始化
// TODO Auto-generated method stub
}
}
过滤器的配置:
(两种方式二选一即可)
(1) 直接通过注解的方式