JSP之Servlet過濾器Filter

1、Servlet過濾器

Servlet 過濾器是可用於 Servlet 編程的 Java 類,可以實現以下目的:

  • 在客戶端的請求訪問後端資源之前,攔截這些請求,可以改變請求中的內容來滿足實際開發的需要。
  • 在服務器的響應發送回客戶端之前,處理這些響應。

2、Filter配置

Filter在Web.xml中配置,示例代碼如下:

<filter>
  <filter-name>LogFilter</filter-name>
  <filter-class>com.runoob.test.LogFilter</filter-class>
  <init-param>
    <param-name>Site</param-name>
    <param-value>菜鳥教程</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>LogFilter</filter-name>
  <url-pattern>/*</url-pattern>    
  <dispatcher>[REQUEST|INCLUDE|FORWARD|ERROR]</dispatcher>
</filter-mapping>

  • <dispatcher>指定過濾器所攔截的資源被 Servlet 容器調用的方式,可以是REQUEST,INCLUDE,FORWARDERROR之一,默認REQUEST。用戶可以設置多個<dispatcher>子元素用來指定 Filter 對資源的多種調用方式進行攔截。
  • <dispatcher>子元素可以設置的值及其意義
    • REQUEST:當用戶直接訪問頁面時,Web容器將會調用過濾器。如果目標資源是通過RequestDispatcher的include()或forward()方法訪問時,那麼該過濾器就不會被調用。
    • INCLUDE:如果目標資源是通過RequestDispatcher的include()方法訪問時,那麼該過濾器將被調用。除此之外,該過濾器不會被調用。
    • FORWARD:如果目標資源是通過RequestDispatcher的forward()方法訪問時,那麼該過濾器將被調用,除此之外,該過濾器不會被調用。
    • ERROR:如果目標資源是通過聲明式異常處理機制調用時,那麼該過濾器將被調用。除此之外,過濾器不會被調用

Filter採用註解的方法配置過濾器,示例代碼如下:
import javax.servlet.Filter;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
@WebFilter(filterName="DemoFilter",urlPatterns={"/*"},initParam={@WebInitParam(name="mood",value="awake")})
public class DemoFilter implements Filter{
 ...
}
其中urlPatterns屬性:用於指定那些URL應該被該過濾器攔截,如果所有頁面均應用該過濾器則可以設置爲“/*”。

3、Servlet監聽器

待續。。。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章