要在 Struts 2 中获取 servlet 请求,我们可以使用ServletRequestAware
或ServletActionContext
。但是,在特定的 Internet资源中,被告知ServletRequestAware
应该使用 . 而不是ServletActionContext
.
这是否与ServletActionContext
在多线程环境中将成为共享资源的事实有关,或者这背后是否有任何其他原因?
要在 Struts 2 中获取 servlet 请求,我们可以使用ServletRequestAware
或ServletActionContext
。但是,在特定的 Internet资源中,被告知ServletRequestAware
应该使用 . 而不是ServletActionContext
.
这是否与ServletActionContext
在多线程环境中将成为共享资源的事实有关,或者这背后是否有任何其他原因?
ServletRequestAware
是一种更好的方法,因为它将动作方法与静态访问器分离。
为了使用ServletActionContext
您需要模拟静态方法和模拟请求来测试某些东西。要测试ServletRequestAware
方法,您只需要模拟请求。
虽然存在使模拟静态方法更容易的工具,但实现接口并传入模拟请求更容易。这就是存在的理由ServletRequestAware
。
这ServletActionContext
是一个仅包含静态方法的助手类,其中一个用于从操作上下文中检索 servlet 请求。但是动作上下文是ThreadLocal,所以不能在多线程环境中共享。
在 Struts2 中,每个请求也没有多线程环境,除了execAndWait
拦截器使用的后台线程。
使用的原因是因为如果堆栈中包含拦截器,则ServletRequestAware
保证获取 servlet 请求对象的方法。servletConfig
您可以ServletActionContext
在任何地方使用,但它不保证null
会返回请求对象而不是。