JavaWeb课程系列
3.3 filter放行请求
我们发现,刚才的filter配置好后,index.jsp页面没法访问了,访问这个页面的时候filter 的dofilter方法被调用了。说明dofilter这个方法拦截了我们的请求。
我们如何显示页面呢。也就是如何将请求放行呢。我们观察发现有个filterChain被传入 到这个方法里面了。filterChain里面有个doFilter()方法。
放行请求只需要调用filterChain的dofilter方法。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("dofilter方法"); chain.doFilter(request, response);//放行请求 } |
3.4 filter拦截原理
我们在chain.doFilter(request, response);方法后也写一句话,System.out.println
(“doFilter方法执行后…”),在index.jsp页面也写上jsp脚本片段,输出我是jsp页面。运 行程序发现控制台输出了这几句话:
dofilter方法…
我是jsp页面
dofilter方法后…
我们不难发现filter的运行流程
4.FilterChain
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
在doFilter执行之前,由容器将filterChain对象传入方法。调用此对象的.doFilter()方法可以将请求放行,实际上是执行过滤器链中的下一个doFilter方法,但是如果只有一个过滤器,则为放行。