Web.xml中Filter過濾器標簽幾個說明


在研究liferay框架中看到Web.xml中加入了過濾器的標簽,可以根據頁面提交的URL地址進行過濾,發現有幾個新標簽沒用過,下面就介紹以下幾個過濾器的標簽用法:

<!-- 定義Filter -->
<filter> <!-- Filter的名字 --> <filter-name>log</filter-name> <!-- Filter的實現類 --> <filter-class>lee.LogFilter</filter-class> </filter> <!-- 定義Filter攔截的URL地址 --> <filter-mapping> <!-- Filter的名字 --> <filter-name>log</filter-name> <!-- Filter負責攔截的URL 全部以/的請求,如果<url-pattern>/*.action </>,將會以攔截*.action的請求--> <url-pattern>/*</url-pattern> </filter-mapping>

在Servlet2.4中filter-mapping中加入了新的標簽<dispatcher> ,里面有4個值即REQUEST, FORWARD,INCLUDE和ERROR,默認不寫這個標簽的時候是REQUEST,該標簽是根據客戶端傳過來的地址進行過濾,FORWARD方法傳過來的request方法可以攔截,<ERROR-PAGE>錯誤頁面傳過來的攔截,INCLUDE包含過來的過濾,一般REQUEST傳過來的攔截.該標簽可以加入多個.

下面例子是引用網上的:

例1:

Xml代碼

  1. <filter-mapping>
  2. <filter-name>Logging Filter</filter-name>
  3. <url-pattern>/products/*</url-pattern>
  4. </filter-mapping>

這種情況下,過濾器將會作用於直接從客戶端發過來的以/products/…開始的請求。因為這里沒有制定任何的< dispatcher >元素,默認值是REQUEST。
例2:

Xml代碼

  1. <filter-mapping>
  2. <filter-name>Logging Filter</filter-name>
  3. <servlet-name>ProductServlet</servlet-name>
  4. <dispatcher>INCLUDE</dispatcher>
  5. </filter-mapping>

這種情況下,如果請求是通過request dispatcher的include方法傳遞過來的對ProductServlet的請求,則要經過這個過濾器的過濾。其它的諸如從客戶端直接過來的對ProductServlet的請求等都不需要經過這個過濾器。
指定filter的匹配方式有兩種方法:直接指定url-pattern和指定servlet,后者相當於把指定的servlet對應的url-pattern作為filter的匹配模式
filter的路徑匹配和servlet是一樣的,都遵循servlet規范中《SRV.11.2 Specification of Mappings》一節的說明
例3:

Xml代碼

  1. <filter-mapping>
  2. <filter-name>Logging Filter</filter-name>
  3. <url-pattern>/products/*</url-pattern>
  4. <dispatcher>FORWARD</dispatcher>
  5. <dispatcher>REQUEST</dispatcher>
  6. </filter-mapping>

在這種情況下,如果請求是以/products/…開頭的,並且是通過request dispatcher的forward方法傳遞過來或者直接從客戶端傳遞過來的,則必須經過這個過濾器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM