分步骤演示如何使用Filter链拦截MyServlet的同一个请求

一、新建两个过滤器

public class MyFilter01 implements Filter {
	public void init(FilterConfig fConfig) throws ServletException {
		// 过滤器对象在初始化时调用,可以配置一些初始化参数
	}
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用
		PrintWriter out=response.getWriter();
		out.write("Hello MyFilter01<br />");
		chain.doFilter(request, response);
	}
	public void destroy() {
		// 过滤器对象在销毁时自动调用,释放资源
	}
}
public class MyFilter02 implements Filter {
	public void init(FilterConfig fConfig) throws ServletException {
		// 过滤器对象在初始化时调用,可以配置一些初始化参数
	}
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用
		PrintWriter out=response.getWriter();
		out.write("MyFilter02 Before<br />");
		chain.doFilter(request, response);
		out.write("<br />MyFilter02 After<br />");	
	}
	public void destroy() {
		// 过滤器对象在销毁时自动调用,释放资源
	}

二、把其他过滤器屏蔽掉,配置这两个过滤器

  <filter>
    <filter-name>MyFilter01</filter-name>
    <filter-class>cn.itcast.chapter08.filter.MyFilter01</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFilter01</filter-name>
    <url-pattern>/MyServlet</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>MyFilter02</filter-name>
    <filter-class>cn.itcast.chapter08.filter.MyFilter02</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFilter02</filter-name>
    <url-pattern>/MyServlet</url-pattern>
  </filter-mapping>

三、重启tomcat

http://localhost:8080/chapter08/MyServlet

四、拦截顺序

与过滤器在web.xml中配置的<filter-mapping>顺序一致

Guess you like

Origin blog.csdn.net/daqi1983/article/details/121379960