當前位置:成語大全網 - 書法字典 - 如何在java項目和web項目中使用過濾器文件?

如何在java項目和web項目中使用過濾器文件?

過濾器是在服務器上運行的程序,先於與之相關聯的servlet或JSP頁面。過濾器可以附加到壹個或多個servlet或JSP頁面上,並可以檢查請求信息以進入這些資源。此後,過濾器可以做出以下選擇:

1.以正常方式調用資源(即調用servlet或JSP頁面)。

2.用修改後的請求信息調用資源。

3.調用資源,但在向客戶端發送響應之前對其進行修改

4.停止資源調用,轉到其他資源,返回特定的狀態代碼或生成替代輸出。

1.建立壹個基本過濾器

創建過濾器包括以下五個步驟:

1)建立壹個實現過濾器接口的類。這個類需要三個方法:doFilter、init和destroy。

doFilter方法包含主要的過濾代碼(參見步驟2),init方法建立設置操作,destroy方法使其變得清晰。

2)將過濾行為放入doFilter方法中。doFilter方法的第壹個參數是ServletRequest對象。該對象為過濾器提供對傳入信息的完全訪問權限,包括表單數據、cookie和HTTP請求頭。第二個參數是ServletResponse,它通常在簡單的過濾器中被忽略。最後壹個參數是FilterChain,用於調用下壹步中描述的servlet或JSP頁面。

3)調用FilterChain對象的doFilter方法。Filter接口的doFilter方法將FilterChain對象作為其參數之壹。當調用該對象的doFilter方法時,下壹個相關的篩選器將被激活。如果沒有其他過濾器與servlet或JSP頁面相關聯,則會激活servlet或JSP頁面。

4)為相應的servlet和JSP頁面註冊過濾器。使用部署描述符文件(web.xml)中的過濾器和過濾器映射元素。

5)禁用激活器servlet。通過使用默認servlet URL防止用戶繞過過濾器設置。

1.1建立壹個實現過濾器接口的類。

所有過濾器都必須實現javax.servlet.Filter該接口包含三個方法,即doFilter、init和destroy。

public void do filter(ServletRequset請求,

ServletResponse響應,

過濾器鏈鏈)

thows ServletException,IOException

每當調用過濾器時(即每次請求與該過濾器相關的servlet或JSP頁面時),都會執行其doFilter方法。正是這種方法包含了大部分過濾邏輯。第壹個參數是與傳入請求相關的ServletRequest。對於簡單的過濾器,大多數過濾邏輯都基於該對象。如果您處理壹個HTTP請求並需要訪問ServletRequest中不可用的方法,如getHeader或getCookies,您應該將此對象構造為HttpServletRequest。

第二個參數是ServletResponse。除了兩種情況外,該參數通常被忽略。首先,如果您想完全阻止對相關servlet或JSP頁面的訪問。您可以調用response.getWriter並直接向客戶端發送響應。其次,如果您想修改相關servlet或JSP頁面的輸出,可以將響應包含在壹個對象中,該對象收集發送給它的所有輸出。然後,在調用serlvet或JSP頁面後,過濾器可以檢查輸出,如果合適的話進行修改,然後將其發送到客戶端。

DoFilter的最後壹個參數是FilterChain對象。對該對象調用doFilter來激活與servlet或JSP頁面相關的下壹個過濾器。如果沒有其他相關的過濾器,對doFilter的調用將激活servlet或JSP本身。

公共void init(filter config配置)thows ServletException

init方法僅在首次初始化過濾器時執行,而不是在每次調用過濾器時執行。對於簡單的過濾器,您可以提供該方法的空主體,但是出於兩個原因您需要使用init。首先,FilterConfig對象提供對servlet環境和在web.xml文件中分配的過濾器名稱的訪問。因此,常用的方法是通過使用init將FilterConfig對象存儲在壹個字段中,以便doFilter方法可以訪問servlet環境或過濾器名稱。其次,FilterConfig對象有壹個getInitParameter方法,該方法可以訪問部署描述符文件(web.xml)中分配的過濾器初始化參數。

公共void銷毀()

大多數過濾器只是為該方法提供壹個空體,然而,它可用於完成清理任務,如關閉過濾器或數據庫連接池使用的文件。

1.2將過濾行為放入doFilter方法中。

doFilter方法是大多數過濾器的關鍵部分。每當調用篩選器時,都會執行doFilter。對於大多數過濾器來說,doFilter執行的步驟是基於傳入信息的。因此,您可能希望利用作為doFilter的第壹個參數提供的ServletRequest。該對象通常被構造為HttpServletRequest,以提供對該類的更多特殊方法的訪問。

1.3調用FilterChain對象的doFilter方法。

Filter接口的doFilter方法將FilterChain對象作為其第三個參數。當調用該對象的doFilter方法時,下壹個相關的篩選器將被激活。這個過程通常持續到鏈中的最後壹個過濾器。當最後壹個過濾器調用其FilterChain對象的doFilter方法時,激活servlet或頁面本身。

但是,鏈中的任何過濾器都可以通過不調用其FilterChain的doFilter方法來中斷此過程。在這種情況下,不再調用JSP頁面的serlvet,中斷該調用過程的過濾器負責向客戶端提供輸出。

1.4為適當的servlet和JSP頁面註冊過濾器。

部署描述符文件的2.3版本為過濾器引入了兩個元素,即過濾器和過濾器映射。filter元素向系統註冊壹個filter對象,filter-mapping元素指定應用filter對象的URL。

以下是壹個完整的示例:

//創建實現篩選器接口的類。這個類需要三個方法:doFilter、init和destroy。

//doFilter方法//包含主過濾代碼,init方法建立設置操作,destroy方法清除它。

包過濾器pkg;

導入javax . servlet . *;

導入javax . servlet/XML/ns/J2EE“

xmlns:xsi =“/XML/ns/J2EE

/XML/ns/J2EE/we B- app _ 2 _ 4 . xsd“& gt;

& lt過濾器& gt

& lt過濾器名稱& gt校驗碼</filter-name & gt;

& lt過濾器類& gtfilter pkg . test filter & lt;/filter-class & gt;

& lt/filter & gt;

& lt過濾器映射& gt

& lt過濾器名稱& gt校驗碼</filter-name & gt;

& lturl模式& gt/* & lt;/URL-pattern & gt;

& lt/filter-mapping & gt;

& ltservlet & gt

& lt描述& gt這是我的J2EE組件的描述& lt/description & gt;

& lt顯示名稱& gt這是我的J2EE組件的顯示名稱</display-name & gt;

& ltservlet-name & gt;ControlServlet & lt/servlet-name & gt;

& ltservlet-class & gt;filterpkg。ControlServlet & lt/servlet-class & gt;

& lt/servlet & gt;

& ltservlet映射& gt

& ltservlet-name & gt;ControlServlet & lt/servlet-name & gt;

& lturl模式& gt*.do & lt/URL-pattern & gt;

& lt/servlet-mapping & gt;

& lt/we B- app & gt;