1. 程式人生 > >Struts2框架之result返回結果

Struts2框架之result返回結果

Struts 2中的Result是作為返回結果的,時當一個action處理完之後返回字串的結果碼。框架可以根據這個返回的字串,對映到指定的頁面。result元素可以分為兩部分:一是結果對映,一部分是返回結果型別。

結果對映

result有兩個屬性可以配置:name屬性和type屬性。其中的name屬性主要用來指定資源的邏輯名稱,實際名稱在標籤內部指定。type屬性就是result的返回型別。要注意的是,這兩個屬性都不是必須的,當我們沒有配置這兩個屬性的時候,實際上框架為我們指定了預設值,其中name屬性的預設值是success,type屬性的預設值是dispatcher(轉發)。正因為框架為我們設定了預設值才可以不用配置。

我們之前的配置都是使用result直接配置,實際上result標籤還有一個子標籤param,該標籤可以為result指定實際資源的位置,其有有一個必需的屬性name,實際上就是之前文章中result的配置的資源。比如下面的配置:

<action name="login" class="action.LoginAction">
            <result>
                <!-- param的location用於指示資源的位置,標籤的內容是引數的值 -->
                <param name="location"
>
/success.jsp</param> </result> <result name="error">/error.jsp</result> </action>

這裡指示資源的實際位置使用param標籤,但是如果result的type屬性是dispatcher的時候,上面的param標籤是可以直接省略的,這也是前面沒有寫param標籤也沒有報錯的原因。

結果型別

結果型別中常用的有四種:dispatcher、redirect、redirectAction和chain。

其中dispatcher已經說過相當轉發,redirect相當於重定向,redirecAction也是重定向,只不過使用該結果型別的時候,一般是重定向到某個action,最後一種主要用於action的鏈式處理。其他的還有plainText(用於顯示頁面的原始內容,比如Servlet或者jsp的原始碼)、xslt等。

第1種:dispatcher

dispatcher也是框架預設的結果型別,其實現類是org.apache.struts2.dispatcher.ServletDispatcherResult,該類中有兩個屬性:location和parse。它們也可以在struts.xml檔案中直接配置:

<result type="dispatcher">
                <!-- param的location用於指示資源的位置,標籤的內容是引數的值 -->
                <param name="location">/success.jsp</param>
                <param name="parse">true</param>
            </result>

其中的location引數用於指定資源的實際位置,該引數也是框架預設新增的;parse引數是一個布林變數,當為true的時候,表示將解析location引數中的OGNL表示式(後面還會介紹)。框架中parse引數的預設值也是true。

第2種:redirect

當使用該結果型別的時候,框架後臺會使用response物件的sendRedirect方法進行重定向,重定向與轉發還是不同的,具體體現在以下幾個方面:

重定向會發生兩次請求,轉發只會發生一次請求

重定向的時候,瀏覽器的位址列會發生變化,而轉發位址列是無變化的
重定向的實質是伺服器告訴瀏覽器去另外的地方尋找資源,所以位址列會發生變化,而轉發是在伺服器內部發生的,所以位址列不會發生變化
由於重定向是兩次請求,所以第二次請求會話儲存的資訊是無效的,而轉發的時候,會話仍然有效,因為仍然是原來的請求。
如果需要在重定向的時候把原來的有關資訊傳送到重定向後的頁面中,則需要使用OGNL表示式${username}(比如在登入成功後重定向到歡迎頁面,在歡迎頁面就可以使用OGNL表示式把使用者名稱傳遞過去),比如下面的配置:

<!-- 登入Action -->
        <action name="login" class="action.LoginAction">
            <result type="redirect">/success.jsp?user.username=${user.username}</result>
            <result name="error">/error.jsp</result>
        </action>

在登入成功之後重定向到success.jsp頁面的時候,可以觀察到瀏覽器的位址列把使用者名稱作為引數傳遞到success.jsp頁面。

第3種:redirectAction

此種結果型別與redirect一樣,底層都是呼叫Response物件的sendRedirect方法進行重定向的,這兩者的區別是redirect結果型別一般是針對檢視的,而redirectAction則是重定向到某個action,所以如果在action處理之後還要交給另一個action繼續處理,那麼使用redirecAction結果型別。

redirecAction結果型別有兩個引數:actionName(指定需要重定向的action)和namespace(指定action所在的名稱空間,如果沒有指定該引數,框架會從預設的namespace中去尋找)。

比如下面的配置:

<!-- HelloWorld演示程式 -->
        <action name="hello" class="example.HelloWorld">
            <!-- 重定向到/user名稱空間下的UserAction -->
            <result type="redirectAction">
                <!-- 指定需要重定向的action的name屬性 -->
                <param name="actionName">userAction</param>
                <!-- 指定重定向的action所在的namespace -->
                <param name="namespace">/user</param>
            </result>
        </action>

        <!-- 登入Action -->
        <action name="login" class="action.LoginAction">
            <result type="redirect">/success.jsp?user.username=${user.username}</result>
            <!-- 重定向到同一namespace下的name屬性為error的action -->
            <result type="redirectAction">
                <!-- 同一namespace下的action不需要指定namespace引數 -->
                <param name="actionName">error</param>
            </result>
        </action>

        <action name="error">
            <result>/error.jsp</result>
        </action>

全域性結果

全域性結果的的主要作用是,在有多個action都需要返回到某個頁面的時候,就可以全域性結果。比如在電商網站購物的時候,檢視訂單,新增商品到購物車都需要先登入,那麼就可以把登入作為一個全域性結果。全域性結果是在包中定義的,這樣該包下的所有action都可以共享該全域性結果了。

配置全域性結果的方式與在action中直接配置result不太一樣,全域性結果是在global-results標籤中定義的。

比如下面的配置:

<!-- 全域性結果配置 -->
        <global-results>
            <result name="error">/error.jsp</result>
            <result name="login" type="redirectAction">login!login</result>
        </global-results>

相關推薦

Struts2框架result返回結果

Struts 2中的Result是作為返回結果的,時當一個action處理完之後返回字串的結果碼。框架可以根據這個返回的字串,對映到指定的頁面。result元素可以分為兩部分:一是結果對映,一部分是返回結果型別。 結果對映 result有兩個屬性可以配

Struts2框架學習result返回結果

                     前言Struts 2中的Result是作為返回結果的,時當一個action處理完之後返回字串的結果碼。框架可以根據這個返回的字串,對映到指定的頁面。result元素可以分為兩部分:一是結果對映,一部分是返回結果型別。結果對映result有兩個屬性可以配置:name屬性

struts2框架重復提交問題

src mage 技術分享 inf 什麽 ner 步驟 什麽是 信息 防止重復提交 1. 什麽是重復提交 * 提交表單時,點擊一次後,頁面沒有刷新時,馬上又點擊一次,就是重復提交 * 提交後,通過瀏覽器的回退,又回到了表單頁面,再次提交 * 提交後,按F5刷新,也是重

struts2框架文件上傳(參考第三天學習筆記)

input 允許 jakarta ges too 文件的 ESS dir 參數 上傳 1. 上傳對表單的要求 * method=post * enctype=multipart/form-data 2. 上傳對servlet要求 * getParameter()不能再使用!

struts2框架攔截器(參考第二天學習筆記)

xxx java clas 完成 攔截 銷毀 == 情況 配置 攔截器 1. 什麽是攔截器 1). 與JavaWeb中的Filter比較相似。 2). 攔截器只能攔截Action!!! 2. Struts中定義了很多攔截器,其中defaultStack中的攔截器會在每個

struts2框架OGNL(參考第三天學習筆記)

元素 eterm 進行 oot 結構 保存 pass 一個表 this ognl 1. 什麽是ognl 對象圖導航語言 Struts內置的表達式語言,它比EL要強大很多。 ------------------ 2. 單獨學習ognl * EL它操作的數據來自於:四大域

Struts2框架struts.xml詳解

Struts2框架之struts.xml詳解 文章目錄 Struts2框架之struts.xml詳解 一個struts.xml的配置示例 package標籤的配置 action標籤的配置 result標

Struts2框架ActionContext

context map的概念介紹: 每次請求時都會建立一個context map的物件, value stack和context map的資料是可以相互轉換的 key value 說明 value stack List集合 以棧的方式來儲存

struts2框架自定義攔截器和配置

  struts框架中也存在攔截器,只不過系統自動呼叫。框架自帶的攔截器的配置檔案所在的位置為:   java Resources--->Libraries--->struts2-core-2.3.36.jar(核心包)--->struts-default.xml   這個配置檔案中放置

struts2框架OGNL表達式概述

except row 通過 結構 strong str ati spa 獲取對象 1. OGNL是Object Graphic Navigation Language(對象圖導航語言)的縮寫 * 所謂對象圖,即以任意一個對象為根,通過OGNL可以訪問與這個對象關聯的

struts2框架OGNL表示式概述

1. OGNL是Object Graphic Navigation Language(物件圖導航語言)的縮寫 * 所謂物件圖,即以任意一個物件為根,通過OGNL可以訪問與這個物件關聯的其它物件 * 通過它簡單一致的表示式語法,可以存取物件的任意屬性,呼叫物件的方法,遍歷整個物件的結構圖,實現欄

Struts2 框架web.xml struts.xml 和相關jar包

1.建立一個web專案.2.在web-inf資料夾下建立web.xmlweb.xml程式碼如下:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/

2. Struts2框架原理篇(簡述)

一、Struts2的執行原理 伺服器啟動載入web.xml 內容,同時建立struts2的過濾器StrutsPrepareAndExecuteFilter,載入一系列的配置 當一個http請求訪問送

Struts2框架值棧

 什麼是值棧 ValueStack    回顧web階段資料互動:         客戶端提交資料到伺服器端:request接受資料,BeanUtils實體封裝。         伺服器端資料在頁面上顯示:在伺服器端將資料儲存到request域中,頁面中通過el+jstl完

細談Struts2框架(一) Struts2框架原理

1.Struts發展歷程 Struts 最早是作為Apache Jakarta專案的組成部分,專案的創立者希望通過對該專案的研究,改進和提高JavaServer Pages、Servlet、標籤庫以及

Struts2result結果型別

伺服器端跳轉   客戶端跳轉  <action name="r1" > <result type="dispatcher" >/r1.jsp</result> </action>

Struts2框架使用(一)Struts2寫一個HelloWorld

同時 style test 框架 exceptio world utf-8 dispatch har 這裏記一下第一次Struts2框架的使用方法,首先學會使用Struts2寫一個HelloWorld。 首先導入Struts2所依賴得jar包 首先創建一個web工程

Struts2框架使用(三)struts.xml配置

package row port dtd tac 結構 www. turn doc 在Struts2的配置文件中,可以采用分模塊的方法來配置,在功能復雜的系統中,使用分模塊方法,可以使結構更清晰。 例如: 下面,有車輛模塊以及資產模塊,將其分為兩個xml文件。 <?

Struts2框架使用(六)ognl表達式獲取值

div access bsp pri 應用程序 屬性 att post list集合 OGNL 是對象圖導航語言 Object-Graph Navigation Language 的縮寫,它是一種功能強大的表達式語言。 我們可以使用ognl獲取很多值。 例如 我們先編寫一個

Java框架Struts2(二)

war cit post extend bst edi 關系 執行 erp 一、Action 配置說明 //請求的直接轉發 <package name="packageUser" namespace="" extends="struts-default">