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
.