我应该通过SessionAware或ActionContext获得会话吗?

时间:2011-09-13 12:05:46

标签: struts2 actioncontext

阅读通过ActionContext.getContext().getSession()获取会话地图并将其注入之间的差异 SessionAware我想知道哪种方法首选,为什么?

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

有人可以详细说明这个问题或指出解释这个问题的参考资料吗?

2 个答案:

答案 0 :(得分:2)

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

单程

Map attibutes = ActionContext.getContext().getSession();

但是如果你使用它,你的动作类直接绑定到Struts2特定方式的ActionContext。 Struts2的主要目标之一是将Action类与底层HTTP上下文以及其他直接依赖项分离。 另外,为普通POJO编写测试用例比其他方式更简单,更好。

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

我希望其他人能在这个问题上获得更多好处

答案 1 :(得分:0)

SessionAware是依赖注入方法,而ActionContext.getContext().getSession()则不是。否则,它们是相同的。这两种方法都返回Map<String, Object>而不是HttpSession,它是servlet API的一部分。