在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物...