struts2的作用域

2021-09-02 15:14:27 字數 3480 閱讀 7710

在struts1中,獲得到系統的request或者session物件非常方便,都是按照形參傳遞的,但是在struts2中,request和session等都被隱藏了

requestmap,

sessionmap,

attributemap(可以獲得所有作用域值),

介面:requestaware,

servletrequestaware,

sessionaware,

分別實現不同的介面就可以得到上邊相應類的物件,需要強轉,還有servletresponseaware介面獲得響應物件,parameteraware獲得所有請求引數

struts提供兩種方式訪問session和request,其中比較常用的是利用spring裡面所說的ioc即控制反轉

ioc方式:

action類實現servletrequestaware介面,並新建乙個httpservletrequest request

public class userloginaction extends actionsupport implements servletrequestaware

然後可以生成的request得到物件,如request.getremoteaddr()

action類實現sessionaware介面,並建立乙個map物件session

public class userloginaction extends actionsupport implements servletrequestaware,sessionaware

public void setsession(map session)

非ioc方式

非ioc方式

這種方式主要是利用了com.opensymphony.xwork2.actioncontext類以及org.apache.struts2.servletactioncontext類,具體的方法如下所示。

獲得request物件:

獲得session物件:

在struts2中底層的session都被封裝成了map型別,我們稱之為sessionmap,而平常我們所說的session則是指httpsession物件,具體的獲得方法如下所示。

a.map session=actioncontext.getsession();

b.map session=(map)actioncontext.getcontext().get(actioncontext.session);

c.可以先獲得請求,然後通過請求獲得httpsession

得到這個sessionmap之後我們就可以對session進行讀寫了,如果我們想得到原始的httpsession可以首先得到httpservletrequest物件,然後通過request.getsession()來取得原始的httpsession物件。一般情況下sessionmap已經可以完成所有的工作,我們不必再去碰底層的session了。

登出:if (session instanceof org.apache.struts2.dispatcher.sessionmap) catch (illegalstateexception e)

}獲得響應方式:

a.         通過ioc方式,實現servletresponseaware介面

使用常量key進行獲取可以得到所有作用域物件及parameter,response物件。利用的就是serv letactionservlet實現的介面:strutsstatics和父類actioncontext中的常量key.

獲得請求引數:

a.    通過ioc方式:實parameteraware介面。

action中:private map map

//重寫介面方法

public void setparameters(mapparameters)

b.   map parameters = actioncontext.getcontext().getparameters();

c. actioncontext.getcontext().get(actioncontext. parameters);

//重寫介面方法

actioncontext(com.opensymphony.xwork.actioncontext)是action執行時的上下文,上下文可以看作是乙個容器(其實我們這裡的容器就是乙個map而已),它存放放的是action在執行時需要用到的物件,比如:在使用webwork時,我們的上下文放有請求的引數(parameter)、會話(session)、servlet上下文(servletcontext)、本地化(locale)資訊等。

在每次執行action之前都會建立新的actioncontext,actioncontext是執行緒安全的,也就是說在同乙個執行緒裡actioncontext裡的屬性是唯一的,這樣我的action就可以在多執行緒中使用。

我們可以通過actioncontext的靜態方法:actioncontext.getcontext()來取得當前的actioncontext物件。

也可以直接使用他的子類servletactioncontext

總結: 

方法一:當把引數作為action的類屬性,且提供屬性的getter/setter方法時,xwork的ognl會自動把request引數的值設定到類屬性中,此時訪問請求引數只需要訪問類屬性即可。 

方法二:可以通過actioncontext物件map  parametermap=context.getparameters();方法,得到請求引數map,然後通過parametermap來獲取請求引數。需要注意的是:當通過parametermap的鍵取得引數值時,取得是乙個陣列物件,即同名引數的值的集合。 

方法三:通過actioncontext取得httpservletrequest物件,然後使用request.getparameter("引數名")得到引數值。

Struts2作用域和標籤庫

actioncontext包含的物件 session user 用 作用域 屬性名 表示在actioncontext的session域中查詢user user表示actioncontext中的user ognl表示式指向valuestack棧中最高層的動作屬性 一.資料標籤 1.property標籤...

struts2的域物件

總共會有4中方法來獲取 1.map型別與物件非ioc 2.map型別的ioc模式,控制權交給了伺服器,來通過set方式注入值 b.重寫方法 例如 public void setrequest map request this.request request 3.httpservlet方式和容器繫結 ...

struts2獲取域物件

request物件 方法一 在action中獲取request方法一 方法二 通過servletactioncontext類來獲取,使用struts2經驗如果處理get傳參是中文,只能使用該方法進行處理亂碼問題 方法三 通過servletrequestaware介面通過ioc機制注入request物...