1. 程式人生 > 其它 >請做一個Filter過濾器的hello world最簡單的一個例子

請做一個Filter過濾器的hello world最簡單的一個例子

請做一個Filter過濾器的hello world最簡單的一個例子

1)helloWorld:

馬 克-to-win:請同學們先做本部分的Filter的hello world實驗。之後根據實驗,再返回來學習我接下來的這段話。由於在web.xml當中,我們Filter的url-pattern是/*,所以當用戶 訪問根目錄下的任何目標檔案時,我們這個Filter都會起作用。當發現使用者要訪問home.jsp時,MarkToWinFilter中的 doFilter方法會被執行。其中"之前 filterChain.doFilter"不出意外的會被打印出來。馬克-to-win:接著就是chain.doFilter(request, response);方法。chain是什麼?看那張說明“Filter的攔截的工作過程”的圖了嗎?那裡面的1234567,7個步驟點,你不覺得就像 一個chain(鏈兒)嗎?所以chain.doFilter(request, response);的意思就是順著鏈,繼續往下走一步,就一步而已,繼續執行。馬克-to-win:如果還是Filter,就還是執行 chain.doFilter,如果是Servlet,就執行doXXX方法。Servlet執行完以後,別忘了,還要回來執行doFilter中的 chain.doFilter後面的部分。請大家仔細觀察實驗執行結果。

例 1.2.1
home.jsp:
<%@ page contentType="text/html; charset=GBK" %>
<%System.out.println("inside jsp"); %>
<br>這是在home.jsp<br>
MarkToWinFilter.java:
package com;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MarkToWinFilter implements Filter {
public MarkToWinFilter() {
System.out.println("單獨啟動伺服器時,constructor被執行,先於init");
}
public void destroy() {
System.out.println("destroy伺服器關閉時執行");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
/*下面這句話必須要。否則客戶端瀏覽器裡"之前"和"之後"兩個詞兒,中文就顯示亂碼。在chain上的response始終就是那一個,回寫到客戶端的結果先快取在response當中,最後一併顯示在客戶端瀏覽器中。*/
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.println("之前 filterChain.doFilter");
System.out.println("之前 filterChain.doFilter");
chain.doFilter(request, response);
System.out.println("之後 filterChain.doFilter");
out.println("之後 filterChain.doFilter");
}
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("單獨啟動伺服器時,init被執行");
}
}


更多內容請見原文,文章轉載自:

https://blog.csdn.net/qq_44638460/article/details/104079508