當前位置:首頁 » 網頁前端 » webxmlfilter順序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

webxmlfilter順序

發布時間: 2022-10-19 03:17:59

A. web.xml中怎麼修改servlet,filter執行順序

servlet可以通過<load-on-startup>n</load-on-startup>設置,但是filter不可以,filter會早於servlet執行,所以需要在filter設置具體的過濾

B. 在web.xml中配置多個filter是怎麼執行的

web.xml的部分配置文件:
<!--配置的filter-->
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- UrlRewrite filter -->
<filter>
<filter-name>urlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<!--配置的filtermapping-->
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
filter的執行類似於棧,執行順序是按照在配置文件中配置的順序執行的,比如定義兩個filter(f1,f2),過濾的對象為index.jsp,則客戶的請求(req)和響應(res)順序是req->f1->f2>index.jsp->f2->f1->res。

C. Servlet3中使用@WebFilter註解怎麼指定Filter的順序

Servlet3.0之前使用web.xml配置按照mapping的順序即先映射的先過濾;
Servlet3.0後使用註解則按照類名的自然順序,即類名的字母順序來排~因為容器載入時按此順序載入~

D. Servlet 3.0 之@WebFilter怎麼控制多個filter的執行順序

之前我們控制多個filter的執行順序是通過web.xml中控制filter的位置來控制的,放在上面的會比放在下面的先執行,如下「用戶登錄檢查過濾器」會比「介面日誌過濾器」先執行

<!--用戶登錄檢測過濾器-->
<filter>
<filter-name>UserLoginFilter</filter-name>
<filter-class>net.tfgzs.demo.filter.UserLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UserLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--介面日誌過濾器-->
<filter>
<filter-name>ApiLog</filter-name>
<filter-class>net.tfgzs.demo.filter.ApiLog</filter-class>
</filter>
<filter-mapping>
<filter-name>ApiLog</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

但是當我們使用@WebFilter註解的時候發現註解裡面沒有提供可以控制執行順序的參數

通過實踐發現如果想要控制filer的執行順序可以通過控制filter的文件名來控制

比如:

UserLoginFilter.java 和 ApiLog.java 這兩個文件裡面分別是「用戶登錄檢查過濾器」和「介面日誌過濾器」,因為這兩個文件的
首字母A排U之前

,導致每次執行的時候都是先執行「介面日誌過濾器」再執行「用戶登錄檢查過濾器」,所以我們現在修改兩個文件的名稱分別為

Filter0_UserLogin.java

Filter1_ApiLog.java

這樣就能先執行「用戶登錄檢查過濾器」再執行「介面日誌過濾器」

E. 想問問@WebFilter的annotation如何設置可以對應web.xml中filter的先後順序問題

沒有特別的屬性和註解來解決這個問題。只能把類名改改,容器會按照類名的大小寫拼寫順序來載入。例如CustomFilter1一定會在CustomFilter2前面執行攔截。

F. 在web.xml中配置多個filter是怎麼執行的

web.xml 中當然可以定義多個 filter,與 filter 相關的一個配置節是 filter-mapping,這里一定要注意,對於擁有相同 filter-name 的 filter 和 filter-mapping 配置節而言,filter-mapping 必須出現在 filter 之後,否則當解析到 filter-mapping 時,它所對應的 filter-name 還未定義。web 容器啟動時初始化每個 filter 時,是按照 filter 配置節出現的順序來初始化的,當請求資源匹配多個 filter-mapping 時,filter 攔截資源是按照 filter-mapping 配置節出現的順序來依次調用 doFilter() 方法的。

G. 多個Filter的執行順序是如何確定

按照web.xml中配置的順序依次執行

<!--過濾順序:誰的寫在上面,誰先被過濾-->
<filter>
<filter-name>FilterTest01</filter-name>
<filter-class>com.Higgin.web.filter.FilterTest01</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterTest01</filter-name>
<url-pattern>/*</url-pattern><!--過濾所有-->
</filter-mapping>

<filter>
<filter-name>FilterTest02</filter-name>
<filter-class>com.Higgin.web.filter.FilterTest02</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterTest02</filter-name>
<url-pattern>/*</url-pattern><!--過濾所有-->
</filter-mapping>

H. 實現filter 什麼時候載入

1、首先可以肯定的是,載入順序與它們在 web.xml 文件中的先後順序無關。即不會因為 filter 寫在 listener 的前面而會先載入 filter。最終得出的結論是:listener -> filter -> servlet
2、同時還存在著這樣一種配置節:context-param,它用於向 ServletContext 提供鍵值對,即應用程序上下文信息。 listener, filter 等在初始化時會用到這些上下文中的信息,實際上 context-param 配置節可寫在任意位置,因此真正的載入順序為:context-param -> listener -> filter -> servlet
3、對於某類配置節而言,與它們出現的順序是有關的。以 filter 為例,web.xml 中當然可以定義多個 filter,與 filter 相關的一個配置節是 filter-mapping,這里一定要注意,對於擁有相同 filter-name 的 filter 和 filter-mapping 配置節而言,filter-mapping 必須出現在 filter 之後,否則當解析到 filter-mapping 時,它所對應的 filter-name 還未定義。web 容器啟動時初始化每個 filter 時,是按照 filter 配置節出現的順序來初始化的,當請求資源匹配多個 filter-mapping 時,filter 攔截資源是按照 filter-mapping 配置節出現的順序來依次調用 doFilter() 方法的。
4、由此,可以看出,web.xml 的載入順序是:context-param -> listener -> filter -> servlet ,而同個類型之間的實際程序調用的時候的順序是根據對應的 mapping 的順序進行調用的。
5、Web.xml常用元素
<web-app>
<display-name></display-name>定義了WEB應用的名字
<description></description> 聲明WEB應用的描述信息
<context-param></context-param> context-param元素聲明應用范圍內的初始化參數。
<filter></filter> 過濾器元素將一個名字與一個實現javax.servlet.Filter介面的類相關聯。
<filter-mapping></filter-mapping> 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。
<listener></listener>servlet API的版本2.3增加了對事件監聽程序的支持,事件監聽程序在建立、修改和刪除會話或servlet環境時得到通知。Listener元素指出事件監聽程序類。
<servlet></servlet> 在向servlet或JSP頁面制定初始化參數或定製URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務的。
<servlet-mapping></servlet-mapping> 伺服器一般為servlet提供一個預設的URL:http://host/webAppPrefix/servlet/ServletName。但是,常常會更改這個URL,以便servlet可以訪問初始化參數或更容易地處理相對URL。在更改預設URL時,使用servlet-mapping元素。
<session-config></session-config> 如果某個會話在一定時間內未被訪問,伺服器可以拋棄它以節省內存。可通過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值,或者可利用session-config元素制定預設超時值。
<mime-mapping></mime-mapping>如果Web應用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。
<welcome-file-list></welcome-file-list> 指示伺服器在收到引用一個目錄名而不是文件名的URL時,使用哪個文件。
<error-page></error-page> 在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面。
<taglib></taglib> 對標記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置,而不用編輯使用這些文件的JSP頁面。
<resource-env-ref></resource-env-ref>聲明與資源相關的一個管理對象。
<resource-ref></resource-ref> 聲明一個資源工廠使用的外部資源。
<security-constraint></security-constraint> 制定應該保護的URL。它與login-config元素聯合使用
<login-config></login-config> 指定伺服器應該怎樣給試圖訪問受保護頁面的用戶授權。它與sercurity-constraint元素聯合使用。
<security-role></security-role>給出安全形色的一個列表,這些角色將出現在servlet元素內的security-role-ref元素 的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更為容易。
<env-entry></env-entry>聲明Web應用的環境項。
<ejb-ref></ejb-ref>聲明一個EJB的主目錄的引用。
< ejb-local-ref></ ejb-local-ref>聲明一個EJB的本地主目錄的應用。
</web-app>

I. 在web.xml配置文件中,伺服器啟動時servlet,filter,listener三者的載入順序

listener-->filter-->servlet

J. 在web.xml中配置多個filter是怎麼執行的

按照你配置文件里定義的filter的先後順序執行,我指的是符合條件的過濾器鏈