一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Struts2框架學習之三:result返回結果

 AlysaLove 2018-01-09

前言

Struts 2中的Result是作為返回結果的,時當一個action處理完之后返回字符串的結果碼??蚣芸梢愿鶕@個返回的字符串,映射到指定的頁面。result元素可以分為兩部分:一是結果映射,一部分是返回結果類型。

結果映射

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

我們之前的配置都是使用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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

結果類型

結果類型中常用的有四種:dispatcher、redirect、redirectAction和chain。其中dispatcher已經說過相當轉發(fā),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>
  • 1
  • 2
  • 3
  • 4
  • 5

其中的location參數用于指定資源的實際位置,該參數也是框架默認添加的;parse參數是一個布爾變量,當為true的時候,表示將解析location參數中的OGNL表達式(后面還會介紹)??蚣苤衟arse參數的默認值也是true。

第2種:redirect

當使用該結果類型的時候,框架后臺會使用response對象的sendRedirect方法進行重定向,重定向與轉發(fā)還是不同的,具體體現在以下幾個方面:

  1. 重定向會發(fā)生兩次請求,轉發(fā)只會發(fā)生一次請求
  2. 重定向的時候,瀏覽器的地址欄會發(fā)生變化,而轉發(fā)地址欄是無變化的
  3. 重定向的實質是服務器告訴瀏覽器去另外的地方尋找資源,所以地址欄會發(fā)生變化,而轉發(fā)是在服務器內部發(fā)生的,所以地址欄不會發(fā)生變化
  4. 由于重定向是兩次請求,所以第二次請求會話保存的信息是無效的,而轉發(fā)的時候,會話仍然有效,因為仍然是原來的請求。

如果需要在重定向的時候把原來的有關信息發(fā)送到重定向后的頁面中,則需要使用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>
  • 1
  • 2
  • 3
  • 4
  • 5

在登錄成功之后重定向到success.jsp頁面的時候,可以觀察到瀏覽器的地址欄把用戶名作為參數傳遞到success.jsp頁面。

第3種:redirectAction

此種結果類型與redirect一樣,底層都是調用Response對象的sendRedirect方法進行重定向的,這兩者的區(qū)別是redirect結果類型一般是針對視圖的,而redirectAction則是重定向到某個action,所以如果在action處理之后還要交給另一個action繼續(xù)處理,那么使用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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

全局結果

全局結果的的主要作用是,在有多個action都需要返回到某個頁面的時候,就可以全局結果。比如在電商網站購物的時候,查看訂單,添加商品到購物車都需要先登錄,那么就可以把登錄作為一個全局結果。全局結果是在包中定義的,這樣該包下的所有action都可以共享該全局結果了。

配置全局結果的方式與在action中直接配置result不太一樣,全局結果是在global-results標簽中定義的。比如下面的配置:

<!-- 全局結果配置 -->
        <global-results>
            <result name="error">/error.jsp</result>
            <result name="login" type="redirectAction">login!login</result>
        </global-results>
  • 1
  • 2
  • 3
  • 4
  • 5

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    精产国品一二三区麻豆| 亚洲日本韩国一区二区三区| 精品日韩视频在线观看| 免费福利午夜在线观看| 久久热九九这里只有精品| 久久午夜福利精品日韩| 99精品人妻少妇一区二区人人妻| 中文字幕欧美视频二区| 丰满少妇被猛烈撞击在线视频| 久久综合狠狠综合久久综合| 亚洲专区一区中文字幕| 九九热精品视频免费在线播放| 国产成人精品国内自产拍| 亚洲一区二区三区熟女少妇| 亚洲国产黄色精品在线观看| 国产成人精品视频一区二区三区| 乱女午夜精品一区二区三区| 国产福利在线播放麻豆| 国产又爽又猛又粗又色对黄| 国产又粗又长又大的视频| 成人精品欧美一级乱黄| 欧美日韩无卡一区二区| 国内精品伊人久久久av高清| 久草视频在线视频在线观看| 免费性欧美重口味黄色| 日本免费一本一二区三区| 亚洲国产日韩欧美三级| 激情综合网俺也狠狠地| 国产欧美日韩精品一区二| 日本欧美三级中文字幕| 91精品蜜臀一区二区三区| 亚洲妇女作爱一区二区三区| 日韩三级黄色大片免费观看| 大香蕉伊人一区二区三区| 日本高清视频在线播放| 福利视频一区二区在线| 欧美亚洲综合另类色妞| 青青操精品视频在线观看| 亚洲成人精品免费在线观看| 国产麻豆视频一二三区| 国产成人亚洲精品青草天美|