我想知道,在我們的dofilter方法中,我打了這個電話chain.doFilter。 doFilter在doFilter中做什麼?它不會得到遞歸調用嗎?doFilter在java的過濾器中的doFilter方法中做什麼?
26
A
回答
44
Servlet過濾器是Chain of responsibility設計模式的實現。
所有過濾器都是鏈接的(按照它們在web.xml中的定義順序)。 chain.doFilter()
正在進入鏈中的下一個元素。鏈的最後一個元素是目標資源/ servlet。
13
它調用chain
對象的doFilter
方法,而不是本身,所以沒有,也不會是遞歸的。
名稱chain
表明,您有過濾器的序列,其中每個過濾器進行一些處理,然後傳遞到序列中的下一,所以每個對象具有chain
構件以指向下一個過濾器的順序,其中在過濾器執行了自己的處理後被調用。然後序列中的最後一個可能具有null
作爲chain
的值,或者它自己知道它是序列中的最後一個。
1
它在內部調用過濾器鏈中下一個過濾器的doFilter
,並且當鏈結束時它調用目標servlet。
0
通過調用chain.doFilter,您可以將請求/響應交給過濾器鏈中的下一個過濾器。如果你不調用它,那麼下一個過濾器(可能在你的web.xml中定義)將不會被執行。
如果你只是叫做doFilter,那麼你會有無盡的遞歸和一個stackoverflow。但是,您正在調用filterChain對象的doFilter方法,該方法指示它執行下一個過濾器。
0
不具有你所談論的任何代碼,我只能認爲你是這樣的:
class Filter implements FilterAPI {
private FilterAPI chain;
FilterAPI(FilterAPI chain) { this.chain = chain; }
@override void doFilter (Set setToFilter) {
// do some filtering on setToFilter
chain.doFilter(setToFilter);
}
}
如果是這樣的話,那麼你是不是叫什麼遞歸,您呼叫的doFilter()在不同的對象上。正如另一個答案中提到的,這是衆所周知的責任鏈設計模式。
1
導致調用鏈中的下一個過濾器,或者如果調用過濾器是鏈中的最後一個過濾器,則會導致調用鏈末尾的資源。
相關問題
- 1. FilterChain doFilter中的java.lang.NullPointerException方法
- 2. Servlet過濾器:有`的doFilter(HttpServletRequest的)`
- 3. 在Servlet過濾器的方法的doFilter不叫
- 4. 獲取httpservletrequest裏面的過濾器的dofilter方法
- 5. Servlet的doFilter方法中的StringBuffer或StringBuilder?
- 6. 生命週期Servlet過濾器doFilter方法
- 7. 在doFilter方法中獲取IllegalStateException
- 8. Java過濾器類的doFilter()沒有被調用
- 9. doFilter方法可能存在的誤解
- 10. FacesContext的#getCurrentInstance()返回在過濾器#的doFilter空()
- 11. doFilter HttpServletRequest return null
- 12. 我如何測試doFilter方法?
- 13. 的doFilter呼籲過很多次
- 14. 在doFilter後更新響應
- 15. 如何在index.xthml中調用doFilter()
- 16. 的Servlet的doFilter setAttributes不是在Servlet的
- 17. 是否有可能在Tomcat中恢復過濾器的doFilter函數中的引用者?
- 18. doFilter調用兩次,有意的行爲?
- 19. Spring緩存不工作在doFilter
- 20. 在Java方法中做什麼?
- 21. Java doFilter()將NPE作爲超類的一部分投入使用
- 22. 在Laravel中使用過濾器的方法 - 有什麼區別
- 23. doFilter JSF用戶身份驗證
- 24. doFilter後添加回復標題
- 25. 爲什麼在下面的Java Stream過濾器方法中不拋出NullPointerException
- 26. doFilter()無法獲得文件上傳的任何請求> 2gb
- 27. 誰將在java中使用過濾器中的服務方法?
- 28. 什麼Socket.getInputStream()。read()方法會在java中做什麼?
- 29. DoFilter()在Servlet的工作完成之前還是之後執行?
- 30. HTTP狀態500 - 濾波執行拋出異常 - 的doFilter和invokeDelegate重複
http://java.sun.com/products/servlet/Filters.html – Fortega 2010-01-13 15:10:57