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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

struts2:struts.xml配置文件详解

發(fā)布時(shí)間:2025/7/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2:struts.xml配置文件详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 幾個(gè)重要的元素

1.1 package元素

package元素用來(lái)配置包。在Struts2框架中,包是一個(gè)獨(dú)立的單位,通過(guò)name屬性來(lái)唯一標(biāo)識(shí)包。還可以通過(guò)extends屬性讓一個(gè)包繼承另一個(gè)包,extends屬性值就是被繼承包的name屬性值,繼承包可以從被繼承包那里繼承到攔截器、Action等。

在Struts2框架中是通過(guò)包來(lái)管理action、result、interceptor、interceptor-stack等配置信息的。包屬性如下:

屬性

說(shuō)明

name包名,作為其它包應(yīng)用本包的標(biāo)記
extends可選屬性,設(shè)置本包繼承其它包
namespace可選屬性,設(shè)置包的命名空間
abstact可選屬性,設(shè)置為抽象包

-extends

  • 當(dāng)一個(gè)包通過(guò)配置extends屬性繼承了另一個(gè)包的時(shí)候,該包將會(huì)繼承父包中所有的配置,包括action、result、interceptor等。
  • 由于包信息的獲取是按照配置文件的先后順序進(jìn)行的,所以父包必須在子包之前被定義。
  • 通常我們配置struts.xml的時(shí)候,都繼承一個(gè)名為“struts-default.xml”的包,這是struts2中內(nèi)置的包。

-namespace

  • 該屬性可以指定包對(duì)應(yīng)的命名空間。由于在一個(gè)Web應(yīng)用中可能出現(xiàn)同名的Action并存的情況,為了避免命名沖突,只要使同名Action位于不同的namespace下就可以了。
  • Struts2中如果沒(méi)有為某個(gè)包指定命名空間,該包使用默認(rèn)的命名空間,默認(rèn)的命名空間總是""。
  • 當(dāng)設(shè)置了命名空間為“/”,即指定了包的命名空間為根命名空間時(shí),此時(shí)所有根路徑下的Action請(qǐng)求都會(huì)去這個(gè)包中查找對(duì)應(yīng)的資源信息。
  • 根命名空間和普通命名空間中的Action的查找是一樣的,即如果有請(qǐng)求“/stu_info.action“(或者是”/C/stu_info.action“),則先查找根命名空間下的Action(或者是/C命名空間下的Action),如果不存在對(duì)應(yīng)的Action,則查找默認(rèn)命名空間里的Action。此規(guī)則對(duì)于多級(jí)別的命名空間也是如此,即如果請(qǐng)求查找/A/A_Login/login.action時(shí),Struts2框架先到/A/A_Login的命名空間里查找名為login的action,如果找不到,則到默認(rèn)的命名空間里查詢,而不會(huì)到它的上一級(jí)“/A“里面查找。

示范:

<package name="caiwu" extends="struts-default" namespace="/caiwu"></package>

1.2 action元素

Struts2框架通過(guò)Action對(duì)象來(lái)處理HTTP請(qǐng)求,該請(qǐng)求的URL地址對(duì)應(yīng)的Action即配置在action元素中。

action元素屬性

屬性名稱(chēng)

功能描述

name請(qǐng)求的Action名稱(chēng)
class可選屬性,Action處理類(lèi)對(duì)應(yīng)具體路徑
method可選屬性,指定Action中的方法名
converter可選屬性,指定Action使用的類(lèi)型轉(zhuǎn)換器
  • 如果沒(méi)有指定method則默認(rèn)執(zhí)行Action類(lèi)中的execute方法;否則調(diào)用method屬性中指定的方法。
  • 如果沒(méi)有指定class則默認(rèn)值為:com.opensymphony.xwork2.ActionSupport,該默認(rèn)類(lèi)使用默認(rèn)的處理方法(啥也沒(méi)做),直接返回success值。

示范:

<action name="list" class="com.clzhang.struts2.demo3.ListAction"></action><action name="listSalarySum" class="com.clzhang.struts2.demo3.ListAction" method="listSalarySum"></action>

1.3 result元素

當(dāng)調(diào)用Action方法處理結(jié)束返回后,下一步就是使用result元素來(lái)設(shè)置返回給瀏覽器的視圖。配置result元素時(shí)常需要指定name和type兩個(gè)屬性。

result屬性

屬性名稱(chēng)

功能描述

name對(duì)應(yīng)Action返回邏輯視圖名稱(chēng),默認(rèn)為success
type返回結(jié)果類(lèi)型,默認(rèn)為dispatcher
  • name屬性對(duì)應(yīng)于Action方法返回的值,success為其默認(rèn)值。
  • type屬性指定結(jié)果類(lèi)型,默認(rèn)的類(lèi)型是dispatcher。

Struts2支持的結(jié)果類(lèi)型

結(jié)果類(lèi)型 

說(shuō)明
dispatcher將請(qǐng)求轉(zhuǎn)發(fā)(forward)到指定的JSP頁(yè)面
redirect  將請(qǐng)求重定向到指定的視圖資源
chain處理Action鏈
freemarker指定Freemarker模板作為視圖
httpheader控制特殊的HTTP行為
redirect-action直接跳轉(zhuǎn)到其它Action
stream向游覽器返回一個(gè)InputStream(一般用于文件下載)????????????????????
velocity指定使用velocity模板作為視圖
xslt用于XM/XSLT整合
plainText???????????????????????????????? 顯示某個(gè)頁(yè)面的原始代碼

示范:

<action name="login" class="com.clzhang.struts2.demo1.LoginAction"><result name="input">/struts2/demo1/login.jsp</result><result name="error">/struts2/demo1/wrong.jsp</result><result name="list" type="redirectAction"><param name="idInList">${id}</param><param name="actionName">listBook</param></result></action>

需要注意dispatcher和redirect的區(qū)別,也就是轉(zhuǎn)發(fā)和重定向的區(qū)別,重定向會(huì)丟失所有的請(qǐng)求參數(shù),而且會(huì)丟失Action處理結(jié)果。

1.4 include元素

在Struts2中提供了一個(gè)默認(rèn)的struts.xml文件,但如果package、action、interceptors等配置比較多時(shí),都放到一個(gè)struts.xml文件不太容易維護(hù)。因此,就需要將struts.xml文件分成多個(gè)配置文件,然后在struts.xml文件中使用<include>標(biāo)簽引用這些配置文件。

示范:

<include file="caiwu.xml"></include><include file="cangku.xml"></include>

1.5 global-results元素

有很多時(shí)候一個(gè)<result>初很多<action>使用,這時(shí)可以使用<global-results>標(biāo)簽來(lái)定義全局的<result>。

示范:

<global-results><result name="user">/struts2/demo3/user.jsp</result><result name="sum">/struts2/demo3/sum.jsp</result><result name="default">/struts2/demo3/default.jsp</result></global-results>

1.6 default-action-ref元素

如果在請(qǐng)求一個(gè)沒(méi)有定義過(guò)的Action資源時(shí),系統(tǒng)就會(huì)拋出404錯(cuò)誤。這種錯(cuò)誤不可避免,但這樣的頁(yè)面并不友好。我們可以使用<default-action-ref>來(lái)指定一個(gè)默認(rèn)的Action,如果系統(tǒng)沒(méi)有找到指定的Action,就會(huì)指定來(lái)調(diào)用這個(gè)默認(rèn)的Action。

示范:

<default-action-ref name="acctionError"></default-action-ref><action name="acctionError"><result>/jsp/actionError.jsp</result></action>

2. Action的動(dòng)態(tài)調(diào)用(DMI)

Struts2提供了包含多個(gè)處理邏輯的Action處理方式,即DMI(Dynamic Method Invocation,動(dòng)態(tài)方法調(diào)用)。它是通過(guò)請(qǐng)求對(duì)象中的一個(gè)具體的方法來(lái)實(shí)現(xiàn)動(dòng)態(tài)的操作。具體說(shuō),在請(qǐng)求Action的URL地址后加上請(qǐng)求方法字符串,與Action對(duì)象中的方法進(jìn)行匹配。其中,Action對(duì)象名稱(chēng)和方法之間用“!“隔開(kāi)。

更多內(nèi)容參考:struts2:多業(yè)務(wù)方法的處理(動(dòng)態(tài)調(diào)用,DMI)

示范:

<A href="list!listUser.action" target="_blank">3.2 通過(guò)URL嘆號(hào)參數(shù)</A>

3. 通配符

在實(shí)際的項(xiàng)目開(kāi)發(fā)中,會(huì)出現(xiàn)多個(gè)Action定義的絕大部分都是相同的情況,這時(shí)就會(huì)產(chǎn)生大量冗余。對(duì)于這種情況,Struts2也給出了相應(yīng)的解決方法,即使用通配符。

通配符

說(shuō)明

*匹配0個(gè)或多個(gè)字符除了“/”
**匹配0個(gè)或多個(gè)字符包含“/”
\character???????????????????????????????????????? ? 轉(zhuǎn)義字符,“\\”匹配“\”;“\*”匹配“*”?????????????????????????????????????????????????????????

通配符“*“通常用在<action>標(biāo)簽的name屬性中,而在class、name屬性及result元素中使用{n}的形式來(lái)代表前面第n個(gè)*所匹配的字符串,{0}來(lái)代表URL請(qǐng)求的整個(gè)Action字符串。

示范一:

<!-- 使用*通配符,第一個(gè)*表示調(diào)用方法,第二個(gè)*表示Action --> <action name="*_*" class="com.clzhang.struts2.action.{2}Action"method="{1}"><result name="success">/{0}Suc.jsp</result> </action>

在上面代碼中,當(dāng)URL請(qǐng)求是/update_Login.action時(shí),會(huì)調(diào)用LoginAction類(lèi)中的update()方法,處理結(jié)束返回到update_LoginSuc.jsp。

示范二:

<!-- 不管調(diào)用哪個(gè)Action,默認(rèn)返回名為Action名的JSP --> <action name="*_*"><result>/{0}.jsp</result> </action>

上面代碼中沒(méi)有指定class屬性,也沒(méi)指定result元素的name,這樣不管訪問(wèn)哪個(gè)Action都會(huì)返回與該Action名字相同的JSP頁(yè)面。?

4.?常量配置

在之前提到struts.properties配置文件的介紹中,我們?cè)?jīng)提到所有在struts.properties文件中定義的屬性,都可以配置在struts.xml文件中。而在struts.xml中,是通過(guò)<constant>標(biāo)簽來(lái)進(jìn)行配置的。

示范:

<constant name="struts.action.extension" value="action"></constant><constant name="struts.ognl.allowStaticMethodAccess" value="true" /><constant name="struts.ui.theme" value="simple"></constant><constant name="struts.custom.i18n.resources" value="message"></constant><constant name="struts.i18n.encoding" value="UTF-8"></constant>

?

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的struts2:struts.xml配置文件详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。