1. 程式人生 > >Struts2 學習整理 大彙總

Struts2 學習整理 大彙總

一 Struts2 概念:

Struts2框架用於javaee 三層架構中的web層(servlet層 顯示層);

Struts2是在Struts1和webwork基礎上發展的全新框架。

二 Struts2 的過濾器

類: StrutsprepareAndExecuteFilter

過濾器在伺服器(tomcat)啟動時就建立了,建立過濾器的時候會執行init(), 在init()方法中主要載入配置檔案

struts.xml & web.xml

三 配置檔案

struts.xml --->Struts2核心配置檔案

位置和名稱都是固定的,位置:src目錄下,名稱:struts.xml(常用)

第二種方式:在src下建立Struts.properties裡面進行配置(不常用)

<!-- 引入dtd 檔案-->
<struts><!--struts2的根標籤-->
<constant name="struts.i18n.enconding" value="utf-8"></constant>
<!--
    constant標籤 常量標籤
    在Struts2預設常量值
    表單提交資料到Action類裡面,如果表單提交資料是通過post提交,可以通過該配置解決中文亂碼,如
    果是get提交就需要編碼轉換
-->

<!--分模組開發
    單獨配置檔案把該配置檔案引入到核心配置檔案中
    比如:引入 hello.xml 配置檔案
-->
<include file="cn/ss/aciont/hello.xml"/>

<constant name ="struts.enable.DynamicMehodInvocation" value="true"></constant>
<!--
    動態訪問實現(不用)在struts.xml配置檔案中,動態訪問在struts2中預設是不開啟的,
    如果想開啟先 開啟一個常量
    頁面訪問路徑${pageContext.request.contextPath}/userAction!save.action
-->

<package name="demo" extends="struts-default" namespace="/">
<!--
    package:類似於程式碼包 區別不同action 要配置action 必須先配置package
    標籤package的屬性:
    name屬性:值和功能本身沒有關係,在一個配置檔案中可以寫多個,一個package標籤中name屬性值不能相同
    extends屬性:屬性值是固定的 struts-default 寫了這個屬性值之後,在package裡面配置的類具有action功能
    namespace屬性:屬性值和action標籤的name屬性值構成訪問路徑 不寫預設"/" ,一般值為"/"固定的
-->

    <!--全域性結果頁面配置-->
    <global-results>
        <result name="success">/hello.jsp</result>
    </global-results>
    <!--
        如果多個actoin,方法裡面返回值相同,到頁面也相同 這時候可以使用全域性結果頁面配置
        即配置全域性結果頁面同時配置區域性結果頁面,以區域性結果頁面為準
    -->

    <action name="hello" class="cn.ss.action.HelloAction">
        <!--
            action標籤配置action訪問路徑
            action標籤的屬性:
            name屬性:namespace屬性值和action標準中的name屬性值構成訪問路徑,一個package標籤裡
            可以寫多個action ,但name值不能一樣
            classe屬性: Action的全路徑
            method屬性: 比如在Action裡面預設執行的方法是execute()方法 ,在Action類裡面可以寫
            其他方法,讓Action裡面多個方法執行,使用method屬性配置
        -->
    <result name="ok" type="dispatcher" >/hello.jsp</result>
    <!--
        result標籤 根據Action的方法返回值 ,配置到不同路徑裡面
        標籤result的屬性
        name屬性: method屬性值=Action裡面方法;方法的返回值=name的屬性值
        type屬性(重點): 配置如何到路徑中(轉發或重定向) type屬性的預設值做轉發操作
            屬性值:dispatcher 預設值;做轉發操作 值:dispatcher
            屬性值:redirect 做重定向
            屬性值:chain 轉發到action 一般不用 會有快取資料
            屬性值:redirectAction 重定向到action 
            
    </action>

    <action name="customer_*" class="cn.ss.action.CustomerAction" method="{1}">
    <!--
        使用萬用字元*實現 actio標籤的name屬性寫符號*
        執行Action類裡面的add()方法,訪問customer_add,使用customer_*,可匹配到* 相當於變成add
        執行Action類裡面的update()方法,訪問customer_update,使用customer_*,可匹配到* 相當於
        變成update
        使用* 匹配任意方法內容
        method屬性值 取值*裡面寫"{1}"
     -->
    </action>
</package>
<struts>
            

web.xml

配置Struts2的過濾器

<web-app><!--web.xml配置檔案的根目錄-->
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

四 Action 類編寫的三種方式

1. 建立普通類,這個類不繼承任何類 不實現任何介面

2.建立類實現介面Action

3.建立類繼承AtionSupport類(ActionSupport implements Action)(常用)

Action介面中有常量值可以直接拿來使用 SUCCESS="success" NONE="none"

none 表示方法沒有返回值 這時候不需要配置result標籤;

相當於方法public void 方法名(){},(這樣寫類也可以實現Action 但不常用)

五 訪問Action的方法(重點)

1.使用action標籤中的method屬性值,屬性值寫Action方法名

2.使用萬用字元*實現 actio標籤的name屬性寫符號*=Action類方法名 任意方法名,action標籤裡的method屬性值 取*值 寫{1}

3.動態訪問實現(不用)

在struts.xml配置檔案中,動態訪問在struts2中預設是不開啟的,如果想開啟先開啟一個常量

<constant name ="struts.enable.DynamicMehodInvocation" value="true"></constant>

頁面訪問路徑${pageContext.request.contextPath}/userAction!save.action