Struts2中使用Session的兩種方法

weixin_34219944發表於2011-10-30

 

在Struts2裡,如果需要在Action中使用到session,可以使用下面兩種方式:
  1. 通過ActionContext 類中的方法getSession得到
  2. 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;
}

相關文章