Servlet 串联过滤器

1. 串联Servlet过滤器的工作流程

Servlet 串联过滤器

 

2. 创建两个过滤器 MyFilter1和MyFilter2

1) MyFilter1

package com.example.filter;
 
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
 
/**
 * Servlet Filter implementation class MyFilter1
 */
//@WebFilter("/MyFilter1")
public class MyFilter1 implements Filter {
 
    /**
     * Default constructor.
     */
    public MyFilter1() {
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }
 
    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here
        System.out.println("dofilter 1");
        // pass the request along the filter chain
        chain.doFilter(request, response);
        System.out.println("after dofilter 1");
    }
 
    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }
 
}

  2) MyFilter 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.example.filter;
 
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
 
/**
 * Servlet Filter implementation class MyFilter2
 */
//@WebFilter("/MyFilter2")
public class MyFilter2 implements Filter {
 
    /**
     * Default constructor.
     */
    public MyFilter2() {
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }
 
    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here
        System.out.println("dofilter 2");
        // pass the request along the filter chain
        chain.doFilter(request, response);
        System.out.println("after dofilter 2");
    }
 
    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }
 
}

  

3) 在web.xml 中配置过滤器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<filter>
   <filter-name>MyFilter1</filter-name>
   <filter-class>com.example.filter.MyFilter1</filter-class>
 </filter>
 <filter-mapping>
   <filter-name>MyFilter1</filter-name>
   <url-pattern>/InfoServlet</url-pattern>
 </filter-mapping>
  
 <filter>
   <filter-name>MyFilter2</filter-name>
   <filter-class>com.example.filter.MyFilter2</filter-class>
 </filter>
 <filter-mapping>
   <filter-name>MyFilter2</filter-name>
   <url-pattern>/InfoServlet</url-pattern>
 </filter-mapping>

  

4) 创建jsp页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="InfoServlet">
    username: <input type="text" name="username"><br>
    <input type="submit" value="submit">
</form>
</body>
</html>

  

5) 创建InfoServlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.example.servlet;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class InfoServlet
 */
@WebServlet("/InfoServlet")
public class InfoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        
    /**
     * @see HttpServlet#HttpServlet()
     */
    public InfoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(request.getParameter("username"));
        request.getRequestDispatcher("infoResult.jsp").forward(request, response);
    }
 
}

  

6) 显示结果

Servlet 串联过滤器

 

 打印的顺序与过滤器的工作流程一致



本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/p/7708130.html,如需转载请自行联系原作者