filter的詳細配置


我們已經了解了filter的基本用法,還有一些細節配置在特殊情況下起作用。

在servlet-2.3中,Filter會過濾一切請求,包括服務器內部使用forward轉發請求和<%@ include file="/index.jsp"%>的情況。

到了servlet-2.4中Filter默認下只攔截外部提交的請求,forward和include這些內部轉發都不會被過濾,但是有時候我們需要forward的時候也用到Filter,這樣就需要如下配置。

<filter>
    <filter-name>TestFilter</filtername>
    <filter-class>anni.TestFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>TestFilter</filtername>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>EXCEPTION</dispatcher>
</filter-mapping>

這樣TestFilter就會過濾所有狀態下的請求。如果我們沒有進行設置,默認使用的就是REQUEST。而EXCEPTION是在isErrorPage="true"的情況下出現的,這個用處不多,看一下即可。

這里FORWARD是解決request.getDispatcher("index.jsp").forward(request, response);無法觸發Filter的關鍵,配置上這個以后再進行forward的時候就可以觸發過濾器了。

Filter還有一個有趣的用法,在filter-mapping中我們可以直接指定servlet-mapping,讓過濾器只處理一個定義在web.xml中的servlet。

<filter-mapping>
    <filter-name>TestFilter</filter-name>
    <servlet-name>TestServlet</servlet-name>
</filter-mapping>

<servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>anni.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
</servlet-mapping>

直接指定servlet-name,TestFilter便會引用TestServlet配置的url-pattern,在某些filter與servlet綁定的情況下不失為一個好辦法。


免責聲明!

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



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