使用 ActionContext 获得 session 会带来单元测试不好作,所以使用 SessionAware 可以用通过的 Map 对象来注入 session ,这样在单元测试的时候只需要创建一个 Map 就可以了。这是一种比较推荐的做法。
LoginAction2.java
package com.user.action;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction2 extends ActionSupport implements SessionAware{
private Map<String,Object> session;
//DI dependency injection
//IoC inverse of control
public String execute() {
session.put("s1", "s1");
// 在这里就是 IoC 控制反转,即不用 new 对象,直接从 IoC 容器中取出一个对象。
return SUCCESS;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
}
session.jsp
<s:property value="#session.s1"/>