Filter 概念简单介绍

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)); 
}
}
相关文章
相关标签/搜索