簡體   English   中英

為什么使用ServletRequestAware而不是ServletActionContext?

[英]Why use ServletRequestAware instead of ServletActionContext?

為了在Struts 2中獲得Servlet請求,我們可以使用ServletRequestAwareServletActionContext 但是,在特定的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM