STRUTS2獲得session和request

handawei_5發表於2010-06-22

在struts1中,獲得到系統的request或者session物件非常方便,都是按照形參傳遞的,但是在struts2中,request和session都被隱藏了
struts提供兩種方式訪問session和request,其中比較常用的是利用SPRING裡面所說的IOC即控制反轉
IOC方式:
action類實現ServletRequestAware介面,並新建一個HttpServletRequest request
public class UserLoginAction extends ActionSupport implements ServletRequestAware{
   public void setServletRequest(HttpServletRequest request) {
     this.request=request;
  }
 然後可以生成的request得到物件,如request.getRemoteAddr()
action類實現SessionAware介面,並建立一個MAP物件session
public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{
   public void setServletRequest(HttpServletRequest request) {
     this.request=request;
  }
public void setSession(Map session) {
  this.session=session;  
 }
非IOC方式
非Ioc方式

這種方式主要是利用了com.opensymphony.xwork2.ActionContext類以及org.apache.struts2.ServletActionContext類,具體的方法如下所示。
獲得request物件:
A HttpServletRequest request = ServletActionContext.getRequest ();
B.ActionContext ct= ActionContext.getContext()
   HttpServletRequest request=
(HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST );
獲得session物件:
在Struts2中底層的session都被封裝成了Map型別,我們稱之為SessionMap,而平常我們所說的session則是指HttpSession物件,具體的獲得方法如下所示。
A.Map session=ActionContext.getSession();
B.Map session=(Map)ActionContext.getContext().get(ActionContext.SESSION);
得到這個SessionMap之後我們就可以對session進行讀寫了,如果我們想得到原始的HttpSession可以首先得到HttpServletRequest物件,然後通過request.getSession()來取得原始的HttpSession物件。一般情況下SessionMap已經可以完成所有的工作,我們不必再去碰底層的session了。

相關文章