java 過濾器Filter中chain.doFilter()之前和之後程式碼的執行順序
阿新 • • 發佈:2019-01-09
過濾器攔截到請求之後,首先是執行doFilter()方法中chain.doFilter()之前的程式碼,然後放棄許可權給下一個過濾器或者serverlet等等,最後才執行chain.doFilter()之後的程式碼。
測試場景:
1.新建一個index.html,配置連線調整到一個test.jsp頁面
2.對test.jsp做兩層過濾,檢視過濾器程式碼中chain.doFilter()之前和之後程式碼的執行順序。
過濾器一:(使用註解控制過濾器執行順序,此處先執行過濾器一,在執行過濾器2)
@WebFilter(filterName="firstFilter0",urlPatterns="/test.jsp") public class FirstFilter implements Filter { @Override public void destroy() { System.out.println("first destroy..."); } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("1. first doFilter..."); arg2.doFilter(arg0, arg1); System.out.println("2. first doFilter..."); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("first init..."); } }
過濾器二:
@WebFilter(filterName="firstFilter1",urlPatterns="/test.jsp") public class SecondFilter implements Filter { @Override public void destroy() { System.out.println("second destroy..."); } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("3. second doFilter..."); arg2.doFilter(arg0, arg1); System.out.println("4. second doFilter..."); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("second init..."); } }
index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="test.jsp">To Test Page</a>
</body>
</html>
test.jsp:
<%@ 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> <h4>Test Page</h4> <% System.out.println("5. Test Page"); %> </body> </html>
在瀏覽器輸入http://localhost:8080/day_38/index.html控制檯將列印如下內容 :
1. first doFilter...
3. second doFilter...
5. Test Page
4. second doFilter...
2. first doFilter...