为了在Struts 2中获得servlet请求,我们可以使用ServletRequestAware
或ServletActionContext
。但是,在特定的互联网resource中,被告知应使用ServletRequestAware
而不是ServletActionContext
。
这是否与ServletActionContext
在多线程环境中成为共享资源有关,还是背后还有其他原因?
最佳答案
ServletActionContext
是一个帮助程序类,仅包含静态方法,其中一个方法用于从操作上下文中检索servlet请求。
但是操作上下文是ThreadLocal,因此不能在多线程环境中共享。
除了executeAndWait
拦截器使用的后台线程外,Struts2中的每个请求也没有多线程环境。
使用ServletRequestAware
的原因是,如果堆栈中包含servletConfig
拦截器,则它是获得servlet请求对象的有保证的方法。
您可以在任何地方使用ServletActionContext
,但不能保证将返回请求对象而不是null
。
关于java - 为什么使用ServletRequestAware而不是ServletActionContext?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26699019/