webwork Action中獲取request, response,session對象的方法

webwork Action中獲取request, response對象的方法
import com.opensymphony.xwork.ActionSupport;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.ActionContext;
ActionContext ctx = ActionContext.getContext();

    HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);

    HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
    //ServletActionContext.APPLICATION;
    //ServletActionContext.SESSION;
    //ServletActionContext.PAGE_CONTEXT;

在webwork2的action裏取request.getParameter參數

webwork的action已經脫離的request,是用getXxx()來取提交過來的參數
如果在寫程序的時候特定需要自己來取Parameter可以通過以下兩種方法實現

第一種用ActionContext類,所有的參數都從這裏ActionContext.getContext().getParameters()取
他返回的是一個Map類型
Map param= ActionContext.getContext().getParameters();
如果有一個提交過來的username
那就可以這樣寫
param.get("username");不過這裏要注意一下param.get("username")是一個String數組(爲什麼要返回數據我也不知道,我從weblogic窗口看到param.get("username")被out出來Ljava.lang.String,忙活了半天)

    String value[] = (String[])param.get("username");
    String username = "";
    for(int i=0;i<value.length;i++)
    {
     username +=value[i];
    }
這樣就可以得到正確的username了

第二種方法是直接把request引用進來

ServletActionContext.getRequest().getParameter("username")
ServletActionContext.getRequest()就是httpservletrequest
這個類再import com.opensymphony.webwork.ServletActionContext
用起來方便些
webwork的action已經脫離的request,是用getXxx()來取提交過來的參數
如果在寫程序的時候特定需要自己來取Parameter可以通過以下兩種方法實現

WebWork之Session ---------

由於WebWork對request,parameter,Session和Application都進行了封裝,將這些隱含的對象封裝成了相應的Map,如RequestMap,ParameterMap,SessionMap和ApplicationMap,而這些Map就組成了ActionContext,因此我們通常都不再需要與request,session這些底層的對象打交道了,這也是我一開始覺得迷惑的地方,因爲我找不到Session了。事實上,對於SessionMap的處理即是對Session的處理了。我們可以通過ActionContext的靜態方法getContext返回一個ActionContext的實例,然後再調用其getSession方法獲得SessionMap,接着就可以利用put和get方法對session進行讀寫的操作了。
          而在頁面上,我們可以通過以下的方式對session進行操作:
<webwork:property value="#session.name" />
          #session.name表示從SessionMap中取得與"name"這個key對應的對象,實際上是調用瞭如下的statement:ActionContext.getContext().getSession().get("name"),並且進行了類型的轉換。又如:      
<webwork:property value="#session.player.name" />
          則是在SessionMap中獲得了Player對象之後,並調用類Player的getter方法:getName()獲得name屬性。
          簡而言之,爲了能夠降低與部署環境的耦合程度,WebWork將Servlet的隱含對象進行了封裝,這在很大程度上簡化了開發的工作。而且WebWork也提供了類ServletActionContext,我們通過這個類中的getRequest方法獲得原始的HttpServletRequest,然後就可以對request和session這些底層對象進行操作了。但是,一般情況下,利用ActionContext.getSession()可以完成幾乎所有的工作了,我們又爲什麼要去碰那些底層的東西呢?因此我們應該優先考慮使用SessionMap,而不是底層的session。
          另外一個需要注意的問題,就是SessionMap和隱藏對象session的作用域是不同的。也就是說,通過 ActionContext.getContext().getSession().put("name","Fantasy Soft"),往SessionMap中寫入了與"name"這個key相對應的內容,但是在頁面上通過session.getAttribute("name")得到的將會是null。


訪問Application,session,request 對象

Trim by Alex.Sue

Webwork提供了很多的方法來訪問Session,Application,Request。

Eg:

Map session = (Map) ActionContext.getContext().get("session");

session.put("myId",myProp);

或者:

ServletActionContext.getRequest().getSession()

Note:不要在action的構造函數裏調用ActionContext.getContext()。可能因爲值未設置而返回的是null值。

Note Also:ActionContext.getContext().get(“session”)=(Map)

ActionContext.getContext().getContext.getSession().

如果需要訪問HttpSession,可以通過ServletConfigInterceptor接口。

在視圖層中,JSP可以通過以下的方式訪問:

<ww: property value="#session.myId" />

<ww: property value="#request.myId" />

所有的servlet範圍可以這樣的訪問:

Map request = (Map) ActionContext.getContext().get("request");

request.put("myId",myProp);

Map application = (Map) ActionContext.getContext().get("application");

application.put("myId",myProp);

Map session = (Map) ActionContext.getContext().get("attr");

attr.put("myId",myProp);

發佈了20 篇原創文章 · 獲贊 32 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章