struts2值的傳遞與接收總結
阿新 • • 發佈:2019-02-10
struts2的傳值與接收(Servlet API解耦的訪問方式)
為了避免與Servlet API耦合在一起,方便Action類做單元測試,
Struts2對HttpServletRequest、HttpSession和ServletContext進行了封裝,
構造了三個Map物件來替代這三種物件.
1.ActionContext方式
簡述: ActionContext是Action的上下文,Struts2自動在其中儲存了一些在Action執行過程中所需的物件,比如application,session, request,parameters,等。Struts2會根據每個執行HTTP請求的執行緒來建立對應的ActionContext,即一個執行緒有一個唯一的ActionContext,需要手工呼叫get()方法,傳入request字串來獲取 Map<String, Object> requestMap=(Map<String, Object>) actionContext.get("request");
requestMap.put("requestKey", "requestValue"); (4)paramters方式: 需要注意的是: A:paramtersMap的只能讀不能寫,如果寫了不會出錯,但也不起作用 B:getParameters的返回值為在map<String,object>,而不是Map<string,String[]> 獲取請求引數: Map<String,Object> parameters=actionContext.getParameters(); Object object=parameters.get("XX");
2.實現AwareAction介面的方式:
簡述: struts2提供了這四個Aware介面用於Action類的實現,從而注入對應的application、request、session,parameter, 不過它們都是Map型別的。這和ActionContext一樣是解耦的,即沒有引入servlet相關的包,是在struts2內部的。 (1)ApplicationAware介面 實現介面方法: private Map<String,Object> application; @Overridepublic void setApplication(Map<String, Object> application) {
this.application=application;
} 操作: //1.向application中加入一個屬性:applicationKey-applicationValue
application.put("applicationKey", "applicationValue");
//2.從請求頁面 application中讀取一個屬性date,並列印
請求頁面:application.setAttribute("date", new Date()); Action接受:appliation.get("date"); 對於1的操作的前臺接收資料通過EL表示式可以接收: ${applicationScope.applicationKey }或者直接的 ${applicationKey}、 (2).SessionAware,RequestAware(與ApplicationAware實現方式雷同) A:SessionAware private Map<String,Object> session;
@Override
public void setSession(Map<String, Object> session) {
this.session=session;
}
B:RequestAware
private Map<String, Object> request;
@Override
public void setRequest(Map<String, Object> request) {
this.request=request;
}
RequestAware和SessionAware的傳值都是用Map中的put方法(參考ApplicationAware) 傳前臺接收值的方式同樣的EL表示式 (3).ParameterAware private Map<String,String[]> parameters;
@Override
public void setParameters(Map<String, String[]> parameters) {
this.parameters=parameters;
} 同樣的需要注意: A: ParameterAware方式只能接受,不能put B:Map型別是 Map<String,String[]> C:接受請求資料: parameters.get("name");//這樣打印出的是:[Ljava.lang.String;@2c0a8c7a 所以得這樣接收請求:(parameters.get("name"))[i] 因為parameters是String[]陣列形式。