在Struts2裡,如果需要在Action中使用到session,可以使用下面兩種方式:
- 通過ActionContext 類中的方法getSession得到
- Action實現org.apache.struts2.interceptor.SessionAware介面的方式來對session進行操作
下面先看一個採用第一種方式,在action中得到session的例子
public class SessionTestAction extends ActionSupport {
public String execute() {
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();
session.put("user", "Test User");
return SUCCESS;
}
}
在這個例子中,通過ActionContext得到session,並往session裡放置一個key為user,值為Test User的內容。
下面是一個實現org.apache.struts2.interceptor.SessionAware介面來對session操作的例子
public class SessionTest1Action extends ActionSupport implements SessionAware {
private Map session;
public void setSession(Map session) {
this.session = session;
}
public String execute() {
this.session.put("user", "Test User 1");
return SUCCESS;
}
}
在這個例子中實現了介面SessionAware中的setSession方法。
上面兩種方式都可以得到session,能實現的功能都一樣。推薦通過第二種方式來使用session,便於單體測試,用第二種方式,只需要構造一個Map就可以對action進行單體測試了。
登出session的方法:
// 登出
public String logout() throws Exception {
((org.apache.struts2.dispatcher.SessionMap<String, Object>) this.session).invalidate();
return SUCCESS;
}