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

分享

struts2:struts.xml配置文件詳解

 收藏小管 2017-08-26

1. 幾個重要的元素

1.1 package元素

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

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

屬性

說明

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

-extends

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

-namespace

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

示范:

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

1.2 action元素

Struts2框架通過Action對象來處理HTTP請求,該請求的URL地址對應(yīng)的Action即配置在action元素中。

action元素屬性

屬性名稱

功能描述

name 請求的Action名稱
class 可選屬性,Action處理類對應(yīng)具體路徑
method 可選屬性,指定Action中的方法名
converter 可選屬性,指定Action使用的類型轉(zhuǎn)換器
  • 如果沒有指定method則默認執(zhí)行Action類中的execute方法;否則調(diào)用method屬性中指定的方法。
  • 如果沒有指定class則默認值為:com.opensymphony.xwork2.ActionSupport,該默認類使用默認的處理方法(啥也沒做),直接返回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元素來設(shè)置返回給瀏覽器的視圖。配置result元素時常需要指定name和type兩個屬性。

result屬性

屬性名稱

功能描述

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

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

結(jié)果類型 

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

示范:

復(fù)制代碼
        <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>
復(fù)制代碼

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

1.4 include元素

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

示范:

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

1.5 global-results元素

有很多時候一個<result>初很多<action>使用,這時可以使用<global-results>標(biāo)簽來定義全局的<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元素

如果在請求一個沒有定義過的Action資源時,系統(tǒng)就會拋出404錯誤。這種錯誤不可避免,但這樣的頁面并不友好。我們可以使用<default-action-ref>來指定一個默認的Action,如果系統(tǒng)沒有找到指定的Action,就會指定來調(diào)用這個默認的Action。

示范:

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

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

Struts2提供了包含多個處理邏輯的Action處理方式,即DMI(Dynamic Method Invocation,動態(tài)方法調(diào)用)。它是通過請求對象中的一個具體的方法來實現(xiàn)動態(tài)的操作。具體說,在請求Action的URL地址后加上請求方法字符串,與Action對象中的方法進行匹配。其中,Action對象名稱和方法之間用“!“隔開。

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

示范:

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

3. 通配符

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

通配符

說明

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

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

示范一:

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

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

示范二:

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

上面代碼中沒有指定class屬性,也沒指定result元素的name,這樣不管訪問哪個Action都會返回與該Action名字相同的JSP頁面。 

4. 常量配置

在之前提到struts.properties配置文件的介紹中,我們曾經(jīng)提到所有在struts.properties文件中定義的屬性,都可以配置在struts.xml文件中。而在struts.xml中,是通過<constant>標(biāo)簽來進行配置的。

示范:

    <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>

 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本精品中文字幕在线视频 | 高清国产日韩欧美熟女| 欧美日韩免费黄片观看| 国产专区亚洲专区久久| 国产一区二区三区口爆在线| 人妻一区二区三区在线| 亚洲欧美国产精品一区二区| 黄片在线免费看日韩欧美| a久久天堂国产毛片精品| 99久久精品午夜一区| 两性色午夜天堂免费视频| 亚洲午夜精品视频观看| 日韩一级一片内射视频4k| 日韩亚洲精品国产第二页| 欧美日韩一级aa大片| 中日韩美一级特黄大片| 欧美精品在线播放一区二区| 亚洲中文字幕视频在线观看| 欧美黑人在线一区二区| 成人精品视频一区二区在线观看| 国产高清三级视频在线观看| 粉嫩内射av一区二区| 日韩国产传媒在线精品| 欧美亚洲国产日韩一区二区| 欧美自拍偷自拍亚洲精品| 成在线人免费视频一区二区| 日本深夜福利在线播放| 超薄肉色丝袜脚一区二区| 成人精品日韩专区在线观看| 亚洲一区二区三区四区性色av| 91偷拍裸体一区二区三区| 国产老熟女超碰一区二区三区| 又黄又色又爽又免费的视频| 好东西一起分享老鸭窝| 亚洲综合色在线视频香蕉视频| 国产又大又黄又粗的黄色| 深夜视频成人在线观看| 精品一区二区三区不卡少妇av| 日本 一区二区 在线| 日本91在线观看视频| 欧美欧美日韩综合一区|