在java web應用程序中調用Servlet.init()和Filter.init()方法的順序是什麼?哪一個被稱爲第一個?所有的Servlet.init()方法都比任何Filter.doFilter方法之前調用?Servlet.init()和Filter.init()調用序列
回答
在webapp的啓動過程中,過濾器始終按照web.xml
中定義的順序進行初始化。
servlet在第一個HTTP請求期間僅在其url模式下默認初始化。但是,您也可以配置它們以在webapp啓動時使用<load-on-startup>
條目進行初始化,您可以在其中指定它們的優先級。然後它們將按照優先順序加載。
例如
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>mypackage.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
如果有更多的servlet具有相同的優先級順序,那麼這些servlet的加載順序是未指定的,可能是任意的。然而Servlets在之後初始化過濾器的初始化,但之前調用過濾器。
- 所有濾鏡:
Filter.init()
- 對於'所有servlet在
web.xml
:Servlet.init()
- 爲要求所有適用的過濾器:
Filter.doFilter()
- 如果適用的servlet尚未初始化:
Servlet.init()
- 對於適用的servlet:
Servlet.service()
This與BalusC的答案相矛盾,這會讓你的(4)在(3)之前發生。 – 2012-09-06 20:20:29
(2)適用於web.xml中具有啓動時加載的servlet。 (4)用於在首次請求servlet時初始化的servlet。 – downeyt 2015-07-14 23:50:28
只是一個方面說明 - 我經歷了在Tomcat(7.0.30)的Filter.init()方法以隨機順序(遍歷所有的HashMap)運行。
這應該是一條評論。 – 2013-04-26 13:54:59
是的,我知道,但我不能評論,因爲我沒有足夠的聲譽。但我認爲值得一提的是,接受的答案在這方面似乎是錯誤的(即調用Filter.init()方法的順序通常是未定義的) – 2013-04-29 13:45:20
請注意。我一直在見證在同一個實例上同時調用Filter.init()和Filter.doFilter()。我仍然感到震驚,無法恢復。它的名字是Jetty。
- 1. Servlet.init異常
- 2. GWT,Guice ServletModule和GWT RPC問題與servlet.init()
- 3. HTTP狀態500 - Servlet.init()
- 4. HTTP狀態500 - Servlet.init()異常
- 5. Apache Tiles - HTTP狀態500 - servlet調度程序的Servlet.init()拋出異常
- 6. jQuery序列和函數調用問題
- 7. 序列化動態方法和反序列化後的調用
- 8. HTTP狀態500 - 爲的servlet MVC-調度Servlet.init()拋出異常
- 9. Spring + Hibernate servlet.init()爲servlet調度器拋出異常
- 10. HTTP狀態500 - 對servlet的彈簧調度Servlet.init()拋出異常
- 11. HTTP狀態500 - 爲servlet調度Servlet.init()拋出異常
- 12. HTTP狀態500 - 爲servlet調度Servlet.init()拋出的異常的web.xml
- 13. 獲取HTTP狀態500 - servlet.init()爲servlet調度器拋出異常
- 14. Servlet.init()進行的servlet彈簧調度拋出異常3
- 15. 調用函數序列
- 16. 序列化時調用GetObjectData
- 17. 調用序列時出錯
- 18. 庫例程調用序列
- 19. Java調用序列分析
- 20. Jquery函數調用序列
- 21. 構造調用序列
- 22. 如何解決這個Servlet.init()錯誤?
- 23. HTTP狀態[500] - Servlet.init()部署戰爭
- 24. Restful web服務拋出servlet.init()異常
- 25. 如何在Servlet.init()中註冊JSF 1.2 PhaseListener?
- 26. GCM HTTP狀態500 - Servlet.init()-Notification未送交─
- 27. HTTP狀態500 - servlet的Servlet.init()異常
- 28. 更改列排序和調整
- 29. 序列化js承諾列表調用
- 30. 阻止調用和Linux調度程序
如果我在web.xml中設置了load-on-startup,我可以確定在任何過濾器的doFilter之前調用了此servlet的init()嗎? – martsraits 2010-05-25 16:30:01
是的,我編輯了它。然而,這與「加載啓動」無關。 – BalusC 2010-05-25 16:31:43
+1對thx很有幫助。 – kukudas 2011-04-12 14:43:53