天天看點

struts2 在服務端接收用戶端送出時取得 session 的兩種方法

struts2 在服務端接收用戶端送出時取得 session 的兩種方法

struts2 取 session 不同于傳統的 Servlet,而是需要繼承 Servlet 或者是調用 ActionContext,兩種方法在 struts2 中均可使用,側重不同,結果一樣。

導入類

import org.apache.struts2.ServletActionContext;

import org.apache.struts2.interceptor.ServletRequestAware;

import org.apache.struts2.interceptor.ServletResponseAware;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

方法一:

Action 繼承 ActionSupport 、ServletRequestAware、ServletResponseAware,以 Servlet 的方式取得 session,當 Action 被通路時,會自動先調用 setServletRequest 和 setServletResponse 以取得 session。

public class Action extends ActionSupport implements ServletRequestAware, ServletResponseAware
{
    // 設定全局變量處理 servlet 傳入
    HttpServletRequest request = null;
    HttpServletResponse response = null;
    HttpSession httpSession = null;


    public void setServletRequest(HttpServletRequest request)
    {
        // 通過傳統 Servlet 方式取得 request
        // 并得到 session
        httpSession = request.getSession();
        // 讀取 session 中 LOGIN_NAME 值
        Object objLoginName = httpSession.getAttribute("LOGIN_NAME");
        if(objLoginName  != null)
        {
            ....
        }
    }

    public void setServletResponse(HttpServletResponse response)
    {
    }
}
           

方法二:

Action 繼承 ActionSupport, 建立 ActionContext 對象取得 session

public class Action extends ActionSupport
{

    public String excute()
    {
        String strResult = Action.NONE;

        // 建立 ActionContext 以提取 session
        ActionContext actionContext = ActionContext.getContext();
        // 用 map 存儲 session
        Map<String, Object> mapParam = actionContext.getParameters();
        Map<String, Object> mapSession = actionContext.getSession();

        // 取某個傳入參數
        Object objLoginName = mapSession.get("LOGIN_NAME");;
        // 檢查
        if(objLoginName  != null)
        {
            strResult = Action.SUCCESS;
        }
    }
    ......
    ......
    ......
    return strResult;
}
           

兩種方法各有優缺,struts2 中官方傾向第二種方法,減少全局變量的使用,而且更直覺;第一種方法對 Action Class 内需要 session 的方法操作會更簡單,而這也是上代 struts 保留下來的方法。

以上代碼未經調試,純屬直接寫的,但邏輯表達已經達到,若有問題Q群讨論

Q群: 236201801

.

繼續閱讀