[英]Why we can't use execAndWait interceptor using ServletActionContext?
[英]Why use ServletRequestAware instead of ServletActionContext?
為了在Struts 2中獲得Servlet請求,我們可以使用ServletRequestAware
或ServletActionContext
。 但是,在特定的Internet 資源中 ,它被告知應該使用ServletRequestAware
而不是ServletActionContext
。
這是否與ServletActionContext
將在多線程環境中成為共享資源有關,還是在此之后還有其他原因?
ServletRequestAware
是一種更好的方法,因為它可以將操作方法與靜態訪問器分離。
為了使用ServletActionContext
測試某些內容,您需要模擬靜態方法並模擬請求。 要測試ServletRequestAware
方法,您只需要模擬請求。
雖然有一些工具可以簡化靜態方法的模擬,但實現接口和傳遞模擬請求卻更加容易。 這就是ServletRequestAware
存在的原因。
ServletActionContext
是一個幫助程序類,僅包含靜態方法,其中一個方法用於從操作上下文中檢索Servlet請求。 但是操作上下文是ThreadLocal ,因此不能在多線程環境中共享。
Struts2中的每個請求也沒有多線程環境,除了executeAndWait
攔截器使用的后台線程。
使用ServletRequestAware
的原因是,如果堆棧中包含servletConfig
攔截器,則它是獲得Servlet請求對象的有保證的方法。
您可以在任何地方使用ServletActionContext
,但不能保證將返回請求對象而不是null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.