为了在Struts 2中获得servlet请求,我们可以使用ServletRequestAwareServletActionContext。但是,在特定的互联网resource中,被告知应使用ServletRequestAware而不是ServletActionContext

这是否与ServletActionContext在多线程环境中成为共享资源有关,还是背后还有其他原因?

最佳答案

ServletActionContext 是一个帮助程序类,仅包含静态方法,其中一个方法用于从操作上下文中检索servlet请求。
但是操作上下文是ThreadLocal,因此不能在多线程环境中共享。

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

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

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

关于java - 为什么使用ServletRequestAware而不是ServletActionContext?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26699019/

10-11 02:32