Java 为什么使用ServletRequestAware而不是ServletActionContext?

Java 为什么使用ServletRequestAware而不是ServletActionContext?,java,multithreading,servlets,struts2,actioncontext,Java,Multithreading,Servlets,Struts2,Actioncontext,要在Struts 2中获得servlet请求,我们可以使用ServletRequestAware或ServletActionContext。然而,在一个特定的互联网上,人们被告知应该使用ServletRequestAware而不是ServletActionContext 这与ServletActionContext将是多线程环境中的共享资源这一事实有关吗?或者这背后还有其他原因吗?是一个只包含静态方法的帮助器类,其中一个用于从操作上下文检索servlet请求。 但动作上下文是,所以不能在多线程环

要在Struts 2中获得servlet请求,我们可以使用
ServletRequestAware
ServletActionContext
。然而,在一个特定的互联网上,人们被告知应该使用
ServletRequestAware
而不是
ServletActionContext

这与
ServletActionContext
将是多线程环境中的共享资源这一事实有关吗?或者这背后还有其他原因吗?

是一个只包含静态方法的帮助器类,其中一个用于从操作上下文检索servlet请求。 但动作上下文是,所以不能在多线程环境中共享

Struts2中的每个请求也没有多线程环境,除了
executeAndWait
拦截器使用的后台线程

使用
ServletRequestAware
的原因是,如果堆栈中包含
servletConfig
拦截器,则可以保证获得servlet请求对象


您可以在任何地方使用
ServletActionContext
,但它不能保证返回的是请求对象而不是
null

ServletRequestAware
是一种更好的方法,因为它将动作方法与静态访问器分离

为了使用
ServletActionContext
测试某些东西,您需要模拟静态方法和模拟请求。要测试
ServletRequestAware
方法,只需模拟请求即可

虽然存在使模拟静态方法更容易的工具,但是实现接口和传递模拟请求更容易。这就是存在ServletRequestAware的原因