Struts2學習筆記(5)-處理結果及結果類型詳解

一、Struts2處理流程

  用戶請求->Struts2框架->控制器(Action)->Struts2框架->視圖資源
  Struts1處理後會返回ActionForward;
  Struts2處理後會返回字符串,這樣的設計提高了代碼的複用性,有利於框架分離。

二、處理結果

每個動作方法都會返回一個String類型的值,Struts2根據這個值決定接下來執行什麼結果。每個動作聲明都必須包含有數量足夠的result元素——每個result元素分別對應着動作方法的返回值;
處理結果通常在struts.xml文件中使用標籤配置。
標籤有以下屬性:
name:結果的名字,它必須與動作方法的返回值想匹配。此屬性可選,默認值是“success”;
type:結果類型。默認值是“dispatcher”,其含義是把控制權轉交給某個JSP頁面。
此兩個屬性的默認值有助於我們編寫出更加短小精悍的配置代碼來。

根絕處理結果位置的不同,分爲兩種結果:

局部結果:將作爲元素的子元素配置,還有子標籤

 <default-action-ref name="CatchALL" />
 <action name="CatchALL">
   <result type="httpheader">
     <param name="status">404</param>
   </result>
 </action>

default-action-ref元素用來定義默認的動作,如果某個URI沒有與之匹配的動作,這個默認的動作將被調用。上述代碼定義了一個名爲CatchAll的默認動作,它使用HttpHeader結果類型把一個“404”狀態代碼發送給瀏覽器。這麼做的效果是:如果沒有匹配到動作,用戶將收到一個“404”狀態報告,他將看到一個來自Web容器的默認頁面,而不是看到Struts2的出錯信息。
5. Redirect

這種結果類型將把用戶重定向到另一個資源,而不是把控制權轉交給該資源。這種結果類型接收下面這些參數:
location:用來給出重定向的目的地。
parse:用來表明是否要把location參數的值視爲一個OGNL表達式類解釋。parse參數的默認值是true。
使用重定向而不轉交控制權的主要理由是爲了把用戶定向到一個外部資源。在需要把用戶定向到一個內部資源的時候,使用Dispatcher結果類型的做法更好,因爲這麼做的速度會更快一些。重定向到內部資源時候,必須給出該資源的URI,這個URI可以指向一個動作。
在Struts2內部,Redirect結果類型由一個名爲HttpServletResponse.sendRedirect的類負責處理,而後果之一是剛纔執行的動作將被“遺忘”而不可能被再次執行。如果你需要在“目的地”頁面或動作裏用到“出發點”動作的狀態,可以通過一些會話級或是請求級的參數來傳遞那些數據。

示例如下:

    <action name="RedirectTest" class="app03a.TestUser">
      <result type="redirect">
         User_input.action?userName=${userName}
      </result>
    </action>

這個例子,RedirectTest動作將重定向到User_input動作並把TestUser動作類的userName屬性的值通過一個名爲userName的請求參數傳遞過去。
注意:需要對“&”和“+”之類的特殊字符進行編碼。重定向目的地時候需要把當中的特殊字改爲轉義序列。eg:“&”改爲&
6. Redirect Action

這種結果類型與Redirect結果類型的行爲很相似,但Redirect
Action不是重定向到另一個資源,而是重定向到另一個動作。Redirect Action結果類型可以有以下幾個參數:
actionName:用來指定“目的地”動作的名字。它是Redirect Action結果類型的默認屬性。
namespace:用來指定“目的地”動作的命名空間。如果沒有給出namespace參數,Struts2將假設“目的地”動作和“出發點”動作處於同一個命名空間裏。
注意:該結果類型重定向的目的地肯定是一個動作,所以你用不着像使用Redirect結果類型那樣必須寫出“目的地”動作名的.action後綴。

  1. Stream

    這種結果類型不會把控制權轉交給一個JSP頁面,它將向瀏覽器發送一個輸出流。

  2. Velocity

    這種結果類型將把控制權轉交給一個Velocity模板。

  3. XSLT

    這種結果類型使用XML/XSLT作爲其視圖技術。

  4. PlainText

    PlainText結果類型通常被用來發送JSP頁面的源代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章