struts2中session使用

dawn009發表於2014-06-07


在Struts2裡,如果需要在Action中使用session,可以透過下面兩種方式得到   

1.透過ActionContext class中的方法getSession得到   

2.Action實現org.apache.struts2.interceptor.SessionAware介面的方式來對session進行操作   

下面先看一個採用第一種方式,在action中得到session的例子   

package s2.ex.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class SessionTestAction
 extends ActionSupport {
    public String execute() {
        ActionContext actionContext = ActionContext.getContext();
        Map session = actionContext.getSession();
        session.put("USER_NAME", "Test User");
        return SUCCESS;
    }
}   

在這個例子中,透過ActionContext得到session,並往session裡放置一個key為USER_NAME,值為Test User的內容。
下面是一個實現org.apache.struts2.interceptor.SessionAware介面來對session操作的例子   

package s2.ex.action;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;  
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_NAME", "Test User 1");
        return SUCCESS;
    }
}   

在這個例子中實現了介面SessionAware中的setSession方法。
上面兩種方式都可以得到session,能實現的功能都是一樣的。
這裡推薦透過第二種方式來使用session,原因是便於做單體測試,用第二種方式,只需要構造一個Map就可以對action
 class進行單體測試了。
在一個專案中可能會有很多action都需要用到session,如果每個action都來實現org.apache.struts2.interceptor.SessionAware這個介面,可能會顯得比較麻煩,所以建議作一個抽象的BaseAction類來實現org.apache.struts2.interceptor.SessionAware介面,以後所有的action只要繼承這個BaseAction就可以了。

下面是一個如何在JSP中使用session的例子。   

"text/html; charset=UTF-8" %>
@page pageEncoding="utf-8" %>
@taglib prefix="s" uri="/struts-tags" %>


Session Test


    

>

"#session.USER_NAME"/>

  

    一般在專案中往往會往session裡放置一個Object,必如說user,user裡有個boolean admin和String userName,如果user裡存在isAdmin的方法,在jsp中可以透過if test="#session.user.admin">來判斷使用者有沒有管理許可權,透過"#session.user.userName">或者來取得使用者名稱。Struts2中Session的使用好東西!!!
-------------------------------&gt>struts2清除session的方法

第一種方法(繼承SessionAware類來取得session,然後用invalidate()方法清理)
public class ExitAction extends ActionSupport implements SessionAware{

@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session1 = request.getSession();
session1.invalidate();
return super.execute();
}

public void setSession(Map arg0) {


}

}
//第二種方法(用ActionContext取session,然後用clear()方法清理)
public class ExitAction extends ActionSupport{

@Override
public String execute() throws Exception {
ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
session.clear();
return super.execute();
}




}
//第三種方法(一樣用ActionContext取session,然後取一個Session的KEY,清除該KEY的session,這種辦法可以選擇性的清理你要清理的session)
public class ExitAction extends ActionSupport{

@Override
public String execute() throws Exception {
ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
session.remove("buser");
session.remove("guser");
session.remove("fuser");
return super.execute();
}

}





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1177554/,如需轉載,請註明出處,否則將追究法律責任。

相關文章