1. 程式人生 > >Struts2中Session的使用

Struts2中Session的使用

在Struts2裡,如果需要在action中使用session,可以通過以下兩種方式得到
一、通過ActionContext class中的方法getSession的到
      例子如下
      import java.util.Map;
      import com.opensymphony.xwork2.ActionContext;
      import com.opensymphony.xwork2.ActionSupport;
      
      public class SessionTestAction extends ActionSupport{
          public Stirng execute(){
              ActionContexrt actionContext = ActionContext.getContext();
              Map session = actionContext.getSession();
              session.put("USER_NAME","Test User");
              return success;
          }
      }
      在這個例子中,通過ActionContext得到session。並往session裡面放置一個key為
      USER_Name,值為Test User的內容。
      
      
二、Action實現org.apache.struts2.interceptor.SessionAware介面的方式來
    對session進行操作
     例子如下
     import java.util.Map;
     import org.apache.struts2.interceptor.SessionAware;
     import com.opensymphony.xwork2.ActionSupoort;
     public class SessionTest1Action extends ActionSupport implements SessionAware{
         private Map session;
         public void setSession(Map session){
             this.session.put("USER_NAME","Test user 1");
         }
     }
     在這個例子中實現了介面SessionAware中的setSession方法。
     
     
     
在這裡推薦使用第二種方式來使用session,原因是便於做單體測試,
用第二種方式,只需要構造一個Map就可以對action class 進行單體測試了。
   在一個專案中可能會有很多action都需要用到session,如果每個session都來實現
 org.apache.struts2.interceptor.SessionAware這個介面,可能會顯得麻煩,所以建議做一個抽象的
 BaseAction類來實現org.apache.struts2.interceptor.SessionAware介面,以後
 所有的action只要繼承這個BaseAction就可以了。



01
    <%@ page contentType="text/html; charset=UTF-8" %>
02
    <%@page pageEncoding="utf-8" %>
03
    <%@taglib prefix="s" uri="/struts-tags" %>
04
    <html>
05
    
06
    <head>
07
        <title>Session Test</title>
08
    </head>
09
    
10
    <body>
11
    <h1><s:property value="#session.USER_NAME"/></h1>
12
    <h1></h1>
13
    </body>
14
    </html>
    

一般在專案中往往會往session裡放置一個Object,比如說user,user裡面有個boolean admin和
String username。如果user裡存放在isAdmin的方法中,在jsp中可以通過
<s:if test="#session.user.admin">來判斷使用者有沒有管理許可權,
通過<s:property value="#session.user.userName">或者來取得使用者名稱。