Java 为什么使用ServletRequestAware而不是ServletActionContext?
要在Struts 2中获得servlet请求,我们可以使用Java 为什么使用ServletRequestAware而不是ServletActionContext?,java,multithreading,servlets,struts2,actioncontext,Java,Multithreading,Servlets,Struts2,Actioncontext,要在Struts 2中获得servlet请求,我们可以使用ServletRequestAware或ServletActionContext。然而,在一个特定的互联网上,人们被告知应该使用ServletRequestAware而不是ServletActionContext 这与ServletActionContext将是多线程环境中的共享资源这一事实有关吗?或者这背后还有其他原因吗?是一个只包含静态方法的帮助器类,其中一个用于从操作上下文检索servlet请求。 但动作上下文是,所以不能在多线程环
ServletRequestAware
或ServletActionContext
。然而,在一个特定的互联网上,人们被告知应该使用ServletRequestAware
而不是ServletActionContext
这与ServletActionContext
将是多线程环境中的共享资源这一事实有关吗?或者这背后还有其他原因吗?是一个只包含静态方法的帮助器类,其中一个用于从操作上下文检索servlet请求。
但动作上下文是,所以不能在多线程环境中共享
Struts2中的每个请求也没有多线程环境,除了executeAndWait
拦截器使用的后台线程
使用ServletRequestAware
的原因是,如果堆栈中包含servletConfig
拦截器,则可以保证获得servlet请求对象
您可以在任何地方使用
ServletActionContext
,但它不能保证返回的是请求对象而不是null
ServletRequestAware
是一种更好的方法,因为它将动作方法与静态访问器分离
为了使用ServletActionContext
测试某些东西,您需要模拟静态方法和模拟请求。要测试ServletRequestAware
方法,只需模拟请求即可
虽然存在使模拟静态方法更容易的工具,但是实现接口和传递模拟请求更容易。这就是存在ServletRequestAware的原因