1.Filter: servlet过滤器,如下摘自别人的文章java
Java中的Filter 并非一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也能够对HttpServletResponse 进行后处理,是个典型的处理链。服务器
Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也能够对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。this
本身的理解:filter只是起到对用户请求预处理和后处理的做用。后期再把请求交给servlet。日志
优势:过滤链的好处是,执行过程当中任什么时候候均可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容。而在实际使用时,就要特别注意过滤链的执行顺序问题code
2.过滤器的做用描述对象
在HttpServletRequest 到达Servlet 以前,拦截客户的HttpServletRequest 。 get
根据须要检查HttpServletRequest ,也能够修改HttpServletRequest 头和数据。 servlet
在HttpServletResponse 到达客户端以前,拦截HttpServletResponse 。 it
根据须要检查HttpServletResponse ,能够修改HttpServletResponse 头和数据。io
3.具体使用看下面的小demo (关于日志记录的)
代码 public class LogFilter implements Filter { //FilterConfig可用于访问Filter的配置信息 private FilterConfig config; //实现初始化方法 public void init(FilterConfig config) { this.config = config; } //实现销毁方法 public void destroy() { this.config = null; } //执行过滤的核心方法 public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)throws IOException,ServletException { //---------下面代码用于对用户请求执行预处理--------- //获取ServletContext对象,用于记录日志 ServletContext context = this.config.getServletContext(); long before = System.currentTimeMillis(); System.out.println("开始过滤..."); //将请求转换成HttpServletRequest请求 HttpServletRequest hrequest = (HttpServletRequest)request; //记录日志 context.log("Filter已经截获到用户的请求地址: " + hrequest.getServletPath()); //Filter只是链式处理,请求依然放行到目的地址 chain.doFilter(request, response); //---------下面代码用于对服务器响应执行后处理--------- long after = System.currentTimeMillis(); //记录日志 context.log("过滤结束"); //再次记录日志 context.log("请求被定位到" + hrequest.getRequestURI() + "所花的时间为: " + (after - before)); } }