日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2 Result详解

發布時間:2025/6/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2 Result详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,Result原理

?1) Result組件是Struts2中用于輸出的組件,實際上就是Java代碼。

?2)Struts2中預制了10中類型的Result,這些Result什么在struts-default.xml中。

? ? 這些類實際上都事先了統一的接口:Result.

Java代碼 ?
  • <result-types>??
  • ?????????<result-type?name="chain"?class="com.opensymphony.xwork2.ActionChainResult"/>??
  • ?????????<result-type?name="dispatcher"?class="org.apache.struts2.dispatcher.ServletDispatcherResult"?default="true"/>??
  • ?????????<result-type?name="freemarker"?class="org.apache.struts2.views.freemarker.FreemarkerResult"/>??
  • ?????????<result-type?name="httpheader"?class="org.apache.struts2.dispatcher.HttpHeaderResult"/>??
  • ?????????<result-type?name="redirect"?class="org.apache.struts2.dispatcher.ServletRedirectResult"/>??
  • ?????????<result-type?name="redirectAction"?class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>??
  • ?????????<result-type?name="stream"?class="org.apache.struts2.dispatcher.StreamResult"/>??
  • ?????????<result-type?name="velocity"?class="org.apache.struts2.dispatcher.VelocityResult"/>??
  • ?????????<result-type?name="xslt"?class="org.apache.struts2.views.xslt.XSLTResult"/>??
  • ?????????<result-type?name="plainText"?class="org.apache.struts2.dispatcher.PlainTextResult"?/>??
  • ?????</result-types>??
  • ?

    3)重點講解一下類型的Result

    --dispatcher ?默認類型,轉發到一個頁面)

    ? ?當一個請求到來,服務器直接轉發到另一個頁面,不能是另一個action。由于這個過程在服務器內部完成,客戶端(瀏覽器)并不知道,所以在地址欄不會顯示真實訪問的頁面,而顯示都是所請求的action的地址。在servlet中相當與forword轉發。

    ?

    --redirect ?(重定向到一個頁面)。

    ? ?當一個請求到來,服務端將實際地址response給瀏覽器,然后瀏覽器重新發起請求,這個過程,瀏覽器是知道訪問的頁面的實際地址的,所以在瀏覽器的地址欄顯示的是實際訪問的jsp頁面地址。但是這種類型不能重定向到一個action.

    ?

    --chain ?轉發到一個action,而不是頁面

    ??

    --redirectAction 重定向到一個action

    ? 跳轉到其他包的action:

    ?

    Java代碼 ?
  • <action?name="login"?class="...">??
  • ????????<!--?Chain?to?another?namespace?-->??
  • ????????<result?type="chain">??
  • ????????????<param?name="actionName">dashboard</param>??
  • ????????????<param?name="namespace">/secure</param>??
  • ????????</result>??
  • ????</action>??
  • 使用redirectAction 帶參數

    Java代碼 ?
  • <span?style="font-size:?14px;?font-family:?'Microsoft?YaHei',?微軟雅黑,?SimHei,?tahoma,?arial,?helvetica,?sans-serif;"><action?name="temp"?class="com.lydia.web.action.TempAction">??
  • ????????<result?type="redirectAction">??
  • ????????????<param?name="actionName">test.action</param>??
  • ????????????<param?name="name">${name}</param>??
  • ????????</result>??
  • </action></span>??
  • ?

    ?

    --stream??

    --json?

    ?

    ?

    4)使用方式

    ?<result name="ok" type="類型">

    ?

    </result>

    ?

    2、Stream類型的Result詳解

    ?1)Stream是用于向頁面直接輸出二進制數據,比如登陸頁面的驗證碼圖片,就可以在服務端生成,然后由這種類型的Result輸出

    ?2) 使用

    <result name="success" type="stream">

    ? <param name="inputName">

    ? ? ?輸出屬性名

    ? </param>

    </result>

    --在struts.xml中,我們可以使用param來給組件的屬性注入默認值

    --<param name="inputName">,這里inputName對應的是StreamResult的inputName屬性,這樣配置相當于會調用StreamResult的setInputName方法給它注入屬性值。

    --注入的屬性值,是Action中的某個屬性的名稱,如下圖,inputName是StreamResult中的一個屬性。在Action中作二進制輸出的屬性要求其類型為InputStream。





    ?-- Result會創建一個輸出流,接到Action中的輸入流,向頁面輸出。

    ?

    3) 驗證碼案例:

    ? ?struts.xml中配置:

    Java代碼 ?
  • <!--?生成驗證碼的Action?-->??
  • ????????<action?name="createImage"??
  • ????????????class="com.netctoss.action.CreateImageAction">??
  • ????????????<result?name="success"?type="stream">??
  • ????????????????<param?name="inputName">??
  • ????????????????????imageStream??
  • ????????????????</param>??
  • ????????????</result>??
  • ????????</action>??
  • ?

    ? ? CreateImageAction.java

    Java代碼 ?
  • public?class?CreateImageAction???
  • ????extends?BaseAction?{??
  • ??????
  • ????//ouput??
  • ????private?InputStream?imageStream;??
  • ??????
  • ????public?String?execute()?{??
  • ????????//生成驗證碼圖片??
  • ????????Map<String,BufferedImage>?map?=???
  • ????????????ImageUtil.createImage();??
  • ????????//通過遍歷得到唯一生成的驗證碼??
  • ????????String?imageCode?=???
  • ????????????map.keySet().iterator().next();??
  • ????????//將驗證碼記錄到session,在登錄驗證時使用??
  • ????????session.put("imageCode",?imageCode);??
  • ????????//根據驗證碼,得到圖片??
  • ????????BufferedImage?image?=?map.get(imageCode);??
  • ????????//將圖片轉換為輸入流,由result作輸出??
  • ????????try?{??
  • ????????????imageStream?=???
  • ????????????????ImageUtil.getInputStream(image);??
  • ????????}?catch?(IOException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????????return?"error";??
  • ????????}??
  • ????????return?"success";??
  • ????}??
  • ??
  • ????public?InputStream?getImageStream()?{??
  • ????????return?imageStream;??
  • ????}??
  • ??
  • ????public?void?setImageStream(InputStream?imageStream)?{??
  • ????????this.imageStream?=?imageStream;??
  • ????}??
  • ??
  • }??
  • ?

    ?

    Java代碼 ?
  • <script?language="javascript"?type="text/javascript">??
  • ????????????function?change(imageObj)?{??
  • ????????????????imageObj.src?=?"createImage?date="?+?new?Date().getTime();??
  • ????????????}??
  • </script>??
  • ??
  • <tr>??
  • ?????<td?class="login_info">驗證碼:</td>??
  • ?????<td?class="width70"><input?name="code"?type="text"?class="width70"?/></td>??
  • ?????<td><img?src="createImage"?alt="驗證碼"?title="點擊更換"?οnclick="change(this);"/></td>????
  • ?????<td><span?class="required"></span></td>????????????????
  • </tr>???????
  • ? BaseAction.java?實現接口SessionAware

    Java代碼 ?
  • /**?
  • ?*??所有Action的父類,可以將通用的代碼?
  • ?*??提取出來放到父類中。?
  • ?*??這里,我們讓BaseAction實現接口SessionAware,?
  • ?*??那么繼承與BaseAction的Action就相當于實現了?
  • ?*??這個接口。在實例化Action之后,Struts2會自動?
  • ?*??調用setSession方法把session注入給Action,?
  • ?*?這里我們利用全局變量session來接收,Action?
  • ?*?可以在調用業務方法時使用它來調用session。?
  • ?*/??
  • public?class?BaseAction?implements?SessionAware?{??
  • ??
  • ????protected?Map<String,?Object>?session;??
  • ??????
  • ????public?void?setSession(Map<String,?Object>?session)?{??
  • ????????this.session?=?session;??
  • ????}??
  • ??
  • }??
  • ?

    3、Json類型的Result詳解

    ?1) 向頁面輸出json格式的字符串

    ?2) struts2 并沒有預制這種類型的Result,但是他非常常用,往往用于頁面的異步校驗。

    ?3) 使用步驟

    ? ? ? ?a,導包:struts2-json-plugin-2.1.8.1.jar

    ? ? ? ?b,struts.xml中將要使用json類型Result的package繼承json-default

    ? ? ? ?c,在struts.xml中配置result

    ? ? ? ? ?--最常用,只是輸出單個屬性

    ?

    Java代碼 ?
  • <result?name="success"?type="json"?>??
  • ????????<param?name="root">??
  • ????????????????指定Action的一個屬性名??
  • ????????<param>??
  • ??</result>??
  • ? ? 注意: name="root"是固定用法;

    ?

    ? ? ? ? ? ? ? ?如指定的屬性是boolean類型,那么Result會把這個屬性做成字符串"true";

    ? ? ? ? ? ? ? ?如指定的屬性是JavaBean,那么Result會把這個屬性做成字符串{"code":"12"}

    ?

    --輸出多個屬性

    ? ??

    Java代碼 ?
  • <result?name="success"?type="json">??
  • ????????<param?name="includeProperties">??
  • ????????????????屬性名1,屬性名2,...??
  • ????????</param>??
  • </result>??
  • ?注意:Result會將這一組屬性做成一個json輸出,

    如Action中有屬性code="aaa",name="zs"

    可以將這2個屬性做成一個json

    {"code":"aaa","name":"zs"}

    ?

    --輸出Action中的所有屬性

    Java代碼 ?
  • <result?name="success"?type="json">??
  • ??????????????????????
  • </result>??
  • 注意:Result會將Action中所有的屬性做成一個

    json輸出{"":"","":""}

    總結

    以上是生活随笔為你收集整理的Struts2 Result详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。