章贡区建设局网站,设计师必去十大网站,wordpress自定义打不开,wordpress免费搭建博客在一个Web应用程序中可以注册多个Filter程序#xff0c;每个Filter程序都可以针对某一个URL进行拦截。如果多个Filter程序都对同一个URL进行拦截#xff0c;那么这些Filter就会组成一个Filter链(也叫过滤器链)。Filter链用FilterChain对象来表示#xff0c;FilterChain对象中…在一个Web应用程序中可以注册多个Filter程序每个Filter程序都可以针对某一个URL进行拦截。如果多个Filter程序都对同一个URL进行拦截那么这些Filter就会组成一个Filter链(也叫过滤器链)。Filter链用FilterChain对象来表示FilterChain对象中有一个doFilter()方法该方法作用就是让Filter链上的当前过滤器放行请求进入下一个Filter接下来通过一个图例来描述Filter链的拦截过程如图1所示。图1 Filter链在图1中当浏览器访问Web服务器中的资源时需要经过两个过滤器Filter1和Filter2首先Filter1会对这个请求进行拦截在Filter1过滤器中处理好请求后通过调用Filter1的doFilter()方法将请求传递给Filter2Filter2将用户请求处理后同样调用doFilter()方法最终将请求发送给目标资源。当Web服务器对这个请求做出响应时也会被过滤器拦截这个拦截顺序与之前相反最终将响应结果发送给客户端。为了让读者更好的学习Filter链接下来通过一个案例分步骤演示如何使用Filter链拦截MyServlet的同一个请求具体如下(1)在chapter04工程的cn.itcast.chapter04.filter包中新建MyFilter01和MyFilter02如例1和2所示。例1 MyFilter01.java1 package cn.itcast.chapter04.filter;2 import java.io.*;3 import javax.servlet.*;4 public class MyFilter01 implements Filter {5 public void destroy() {6 // 过滤器对象在销毁时自动调用释放资源7 }8 public void doFilter(ServletRequest request, ServletResponse response,9 FilterChain chain) throws IOException, ServletException {10 // 用于拦截用户的请求如果和当前过滤器的拦截路径匹配该方法会被调用11 PrintWriter outresponse.getWriter();12 out.write(Hello MyFilter01);13 chain.doFilter(request, response);14 }15 public void init(FilterConfig fConfig) throws ServletException {16 // 过滤器对象在初始化时调用可以配置一些初始化参数17 }18 }例2 MyFilter02.java1 package cn.itcast.chapter04.filter;2 import java.io.*;3 import javax.servlet.Filter;4 import javax.servlet.*;5 public class MyFilter02 implements Filter {6 public void destroy() {7 // 过滤器对象在销毁时自动调用释放资源8 }9 public void doFilter(ServletRequest request, ServletResponse response,10 FilterChain chain) throws IOException, ServletException {11 // 用于拦截用户的请求如果和当前过滤器的拦截路径匹配该方法会被调用12 PrintWriter outresponse.getWriter();13 out.write(MyFilter02 Before);14 chain.doFilter(request, response);15 out.write(MyFilter02 After);16 }17 public void init(FilterConfig fConfig) throws ServletException {18 // 过滤器对象在初始化时调用可以配置一些初始化参数19 }20 }(2)在web.xml文件中将MyFilter01和MyFilter02注册在MyServlet前面具体如下所示MyFilter01cn.itcast.chapter04.filter.MyFilter01MyFilter01/MyServletMyFilter02cn.itcast.chapter04.filter.MyFilter02MyFilter02/MyServletMyServletcn.itcast.chapter04.filter.MyServletMyServlet/MyServlet(3)重新启动Tomcat服务器在浏览器地址栏中输入http://localhost:8080/chapter04/MyServlet此时浏览器窗口中的显示结果如图2所示。从图2中可以看出MyServlet首先被MyFilter01拦截了打印出MyFilter01中的内容然后被MyFilter02拦截直到 MyServlet被MyFilter02放行后浏览器才显示出MySerlvet中的输出内容。需要注意的是Filter链中各个Filter的拦截顺序与它们在web.xml文件中元素的映射顺序一致由于MyFilter01的元素位于MyFilter02的元素前面因此用户的访问请求首先会被MyFilter01拦截然后再被MyFilter02拦截。猜你喜欢什么是filter?filter是用来做什么的?