我對HttpServletRequest
生活對象有懷疑。對象request
進入controller
後是否被銷燬?什麼是HttpServletRequest對象的生命?
4
A
回答
5
HttpServletRequest
對象的生命週期就是這樣的:服務HTTP Servlet請求的時間。
它可能在調用servlet的doGet()
,doPost()
等方法之前創建,並可能在此之後被銷燬。只有在提供請求時才使用它。
注:然而Servlet容器可以重用多個請求HttpServletRequest
對象(這是通常的情況),但是它們將被「清潔」或復位,所以沒有對象(如參數或屬性)之間會泄漏要求。這僅僅是由於性能問題:重置一個對象比重複一個現有對象並創建一個對象更快更便宜。
在一個典型的Servlet容器實現中,如果HTTP請求進入,那麼當請求的HTTP輸入數據被Servlet容器解析時,創建一個HttpServletRequest
。整個請求可能會被懶惰地初始化(例如,如果參數是真正被訪問的,例如通過getParameter()
方法),則參數可能僅被解析和填充。然後此HttpServletRequest
(其延伸ServletRequest
)通過Servlet過濾器,然後傳遞到Servlet.service()
這將調度基於HTTP方法(GET
,POST
,PUT
等)調用doGet()
,doPost()
等。然後,請求仍然存在,直到請求 - 響應對循環遍歷整個過濾器鏈。然後它將被銷燬或重置(在用於其他HTTP請求之前)。
相關問題
- 1. thread_local和std :: future對象 - 對象的生命週期是什麼?
- 2. @catch塊中捕獲的對象的生命週期是什麼?
- 3. Java HttpSession對象的生命週期是什麼?
- 4. 什麼是對象的一生?
- 5. 什麼是「對象生命週期管理」中的「活動對象」?
- 6. 「最衍生對象」是什麼意思?
- 7. HttpServletRequest對象的字段被延遲截斷。爲什麼?
- 8. jsp PageContext對象的生命週期是什麼?它是線程安全的嗎?
- 9. 是否有可能更改httpservletrequest對象
- 10. 什麼是測試方法的最佳方式,處理HttpServletRequest對象java
- 11. 對象發生了什麼?
- 12. 爲什麼我沒有在Struts2 Action中初始化HttpServletRequest對象?
- 13. 什麼是對象SqlConnection.BeginTransaction對
- 14. 我的對象重命名腳本中發生了什麼?
- 15. typeid運算符返回的對象的生命週期是什麼?
- 16. 命名屬性是對象的最佳做法是什麼?
- 17. 是什麼讓silverlight對象被加載和它的生命週期?
- 18. Grails命令對象@PostConstruct什麼的?
- 19. 什麼是Webservice的生命週期?
- 20. Watch App的生命週期是什麼?
- 21. 活動的生命週期是什麼?
- 22. PHP對象 - 什麼是對象?
- 23. Java對象的生命
- 24. 是什麼是什麼的區別新對象{}和新的對象(){}
- 25. 什麼是龜對象?
- 26. 什麼是'NoneType'對象?
- 27. 什麼是持久對象?
- 28. 什麼是任意對象?
- 29. 什麼是對象分解?
- 30. 什麼是對象鑄造?
如果有人將HttpServletRequest對象傳遞給其他地方,那麼HttpServletRequest對象將保持超出請求週期。您怎麼看? – 2014-09-25 10:43:35
是的,你可以這樣做,但在請求週期外使用請求對象是無效的。所以強烈不建議。 – icza 2014-09-25 10:44:46
@icza你不知道你剛纔幫了我多少 - 我們有一個問題,在'HttpServletRequest'通過spring的'@ Async'傳遞了一段時間,並且在某些時候它是被清除的字段。你的輸入 - 「然而,Servlet容器可以重複使用HttpServletRequest對象來處理多個請求(這通常是這種情況),但它們將被」清除「或重置,因此沒有對象(如參數或屬性)會在請求之間泄漏。發現!**。謝謝! – Eugene 2017-10-05 08:15:22