Struts2 我应该通过SessionAware还是ActionContext获得会话?

Struts2 我应该通过SessionAware还是ActionContext获得会话?,struts2,actioncontext,Struts2,Actioncontext,在阅读了通过ActionContext.getContext().getSession()获取会话映射和通过 SessionAware我想知道哪个是首选方法,为什么 API建议使用SessionAware,我在网上看到,使用SessionAware使应用程序更易于测试——测试是唯一的问题吗 有人能详细说明一下这个问题吗,或者指出一些解释这个问题的参考资料吗?我已经在你前面的问题中回答了同样的问题。你可以使用任何一种方式,甚至可以通过更多的方式访问会话 单程 Map attibutes = Act

在阅读了通过
ActionContext.getContext().getSession()
获取会话映射和通过
SessionAware
我想知道哪个是首选方法,为什么

API建议使用
SessionAware
,我在网上看到,使用
SessionAware
使应用程序更易于测试——测试是唯一的问题吗


有人能详细说明一下这个问题吗,或者指出一些解释这个问题的参考资料吗?

我已经在你前面的问题中回答了同样的问题。你可以使用任何一种方式,甚至可以通过更多的方式访问会话

单程

Map attibutes = ActionContext.getContext().getSession();
但是,如果您使用它,并且您的action类直接绑定到特定于Struts2的
ActionContext
。 Struts2的主要目标之一是将操作类与底层HTTP上下文以及其他直接依赖项解耦。 此外,为普通POJO编写测试用例要比其他方法简单且更好

通过实现
SessionAware
接口,您可以指示Struts2您希望会话作为一个简单的映射对象,这不仅使代码更加解耦,而且易于维护和测试


我希望其他人能在这方面提供更多的优点,SessionAware是一种依赖注入方法,而ActionContext.getContext().getSession()不是。否则,它们是相同的。这两种方法都会返回一个
Map
,而不是
HttpSession
,后者是servlet API的一部分。

在这个答案中,您说过第一种方法是将action类与struts2特定的类绑定,即ActionContext类。第二种方法是,如果我们将SessionAware接口实现到我们的action类,那么action类也与struts2特定的类绑定,即SessionAware。现在区别在哪里?@Jagadeesh:当你要进行单元测试时,在使用ActionContext进行单元测试时,您可以简单地插入一个映射,这并不是那么容易的…这有更多的细节…我的建议是检查文档,并查看这两个文档以获得清晰的想法。感谢您的澄清:)答案应该是答案,但您的答案不是。他的问题是知道哪种方法是好的,并且知道这两种方法的优点和缺点。如果你能以同样的方式回答这个问题,那就太好了。@Jagadeesh我确实提供了一个答案,解释了这两种方法有相同的结果,但有一种方法遵循依赖注入方法,正如他在问题中指出的,这是首选方法。如果您愿意,欢迎您提供自己的答案。