本篇屬于附加篇,在之前的總結中給大家提到過一個關于登錄狀態驗證的效果,當時是通過session對象完成的,今天我查了一下,JSP為我們封裝了一個用于過濾用的過濾器類Filter,通過它我們就可以非常輕松的完成之前的那個功能了,而且可以在很多地方使用,非常實用。廢話不多說,下面開始簡單為大家介紹一下JSP提供的過濾器類。
1、過濾器簡介:
過濾器是什么?過濾器就是根據過濾規則對過濾源進行過濾,然后得到過濾結果。Web過濾器的是什么呢?首先Web過濾器的過濾源是用戶的各種請求,過濾規則是開發人員實現制定好的,過濾結果是響應。如何理解呢?大家應該都有這樣的經歷,當我們想下載一個資源時,如果沒有登錄,這是系統就會彈出登錄窗口強制我們登錄;而當我們已經登錄后,我們單擊下載時,便不會出現強制我們登錄的頁面。這便是今天我們要一起學習的Web攔截器知識。
2、過濾器的工作原理:
3、過濾器的生命周期:
過濾器的初始化,我們將我們的工程添加到Tomcat后,當啟動Tomcat后,系統便立即會調用過濾器的init()方法,也就是我們的工程一旦部署,我們在項目的添加的過濾器便立刻開始工作。當我們關閉Tomcat時,我們的過濾器會調用destroy()方法,結束我們的過濾監聽。
4、探究過濾器的工作原理:
a、創建過濾器對象類:
public class firstFilter implements Filter { public void destroy() { System.out.該類需要實現javax.servlet.Filter接口:
b、web.xml文件聲明:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 過濾器對象聲明 --> <filter> <filter-name>firstFilter</filter-name><!-- 過濾器名 --> <filter-class>cn.imcook.filter.firstFilter</filter-class><!-- 指定我們新建的過濾器對象的地址 --> </filter> <!-- 過濾規則聲明 --> <filter-mapping> <filter-name>firstFilter</filter-name><!-- 指定規則對于的過濾器對象 --> <url-pattern>/*</url-pattern><!-- *:代表所有的請求 --> <dispatcher>REQUEST</dispatcher><!-- 該處有四個值可選,默認是REQUEST --> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <login-config> <auth-method>BASIC</auth-method> </login-config></web-app>這樣一行行寫代碼,很不方便,myeclipse為我們提供了窗口化操作,請看下面的步驟:
打開我們的web.xml文件,點擊Design,進入窗口操作界面:
點擊左側的Filter,先添加一個過濾器對象:
然后再點擊Filter,添加該過濾器的規則聲明(Filter Mapping):
5、啟動Tomcat,在地址瀏覽器地址欄輸入我們的工程名(例如:http://localhost:8080/HelloWord/index.jsp),觀察myeclipse控制臺的輸出。
·
以上便是我們對Filter生命周期的探究。
6、過濾重定向:
在這里我們只需要在我們創建的Filter類中稍作修改就可以完成了,那如何修改呢?我只需要在我們的doFilter()方法中添加一個重定向就可以了。
public class loginFilter implements Filter { public void destroy() { System.out.println("Destroy"); } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("start-----doFilter"); //arg2.doFilter(arg0, arg1); //重定向 HttpServletRequest requst = (HttpServletRequest)arg0; HttpServletResponse response = (HttpServletResponse)arg1; response.sendRedirect(requst.getContextPath()+"/Login.jsp"); System.out.println("end------doFilter"); } public void init(FilterConfig arg0) throws ServletException { System.out.println("Init"); }}對于JSP中關于過濾器的知識,就先為大家總結到這里,如果你對過濾器知識很感興趣,請持續關注博客。下一篇:對個過濾器執行順序
新聞熱點
疑難解答