Struts2入門-01

Struts2是什麼

概述


1. 什麼是Struts2的框架
   /* Struts2是Struts1的下一代產品,是在 struts1和WebWork的技術基礎上進行了合併的全新的Struts 2框架。
    * 其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。
    * Struts 2以WebWork爲核心,採用攔截器的機制來處理用戶的請求,這樣的設計
      也使得業務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解爲WebWork的更新產品。
    * 雖然從Struts 1到Struts 2有着太大的變化,但是相對於WebWork,Struts 2的變化很小。

2. Struts2是一個基於MVC設計模式的Web層框架
    * MVC和JavaEE的三層結構
        * MVC設計模式:是由一些網站的開發人員提出來的
        * JavaEE三層結構:SUN公司爲EE開發劃分的結構

3. 常見的Web層的框架
    * Struts1
    * Struts2
    * Webwork
    * SpringMVC

4. Web層框架的特點
    * 都是一個特點,前端控制器模式
    * 記住:前端控制器(核心的控制器)
    * Struts2框架前端的控制器就是過濾器
5. 前端控制器模式
    * 傳統的方式中,一個請求對應着一個servlet
    * 在web層框架中,所有的請求會先經過一個前端控制器,在前端控制器中實現框架的
      部分功能,具體的業務邏輯交給具體的Action
    * 在struts中採用過濾器來實現前端控制器  

快速搭建struts2框架

導包

1. 創建WEB項目,編寫JSP的頁面,編寫超鏈接,點擊超鏈接發送請求,請求服務器,讓服務器的方法去執行!!
    <h3>Struts2的入門程序</h3>
    <a href="${ pageContext.request.contextPath }/hello.action">Struts2入門程序</a>

2. 下載Struts2的開發包
    * https://struts.apache.org/        -- 官網地址

3. 解壓struts-2.3.24-all.zip包
    * 解壓後會看到有包和一些文件,大家需要掌握包相關的信息
        * apps  -- Struts2框架提供了一些應用
        * libs  -- Struts2框架開發的jar包
        * docs  -- Struts2框架開發文檔
        * src   -- Struts2框架源碼

4. 引入需要開發的jar包
    * Struts2框架的開發jar包非常多,但是不是所有都是必須要引入的,有一些必須要導入的jar包
      這些jar包可以從Struts2框架提供的應用中找到。
    * 大家可以打開apps目錄,然後找到struts2-blank.war應用。war包和zip包的壓縮格式是一樣的
      所以可以自己修改後綴名,解壓。
    * 導入解壓後的jar包就可以了

書寫Action類

    /**
     * Action類中的方法簽名有要求的,必須這麼做
     * public 共有的
     * 必須有返回值,必須String類型
     * 方法名稱可以是任意的,但是不能有參數列表
     * 頁面的跳轉:
     *  1. return "字符串"
     *  2. 需要在strtus.xml配置文件中,配置跳轉的頁面
     */

public String execute(){
    System.out.println("hello struts2");
    return "success";
}

書寫配置文件(src/struts.xml)

  • 配置文件名稱是struts.xml(名稱必須是struts.xml)
  • 在src下引入struts.xml配置文件(配置文件的路徑必須是在src的目錄下)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <package name="hello" namespace="/hello" extends="struts-default" >
        <action name="HelloAction" class="cn.itheima.a_hello.HelloAction" method="hello" >
            <result name="success" type="dispatcher" >/hello.jsp</result>
        </action>
    </package>
</struts>

配置核心過濾器到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>

測試

輸入請求路徑測試

struts2架構(訪問流程)

image

image

配置文件詳解

struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <!--
        1.package: 將Action配置封裝,就是在package中可以配置很多Action
             * name : 給包起個名字,起到標識作用(不與其他包名重複即可)隨便取
             * namespace : 給action的訪問路徑中定義一個命名空間,跟<action>標籤中的
                           name屬性共同決定訪問路徑,默認爲空
             * extends : 繼承一個指定包,只要繼承了就具有該包的所有功能 struts-default 是必須要繼承的
             * abstract : 包是否爲抽象的; 標識性屬性(給開發者看的)標識該包不能獨立運行.專門被繼承

       2.action: 配置action類
             * name : <package>標籤的namespace屬性一起來決定訪問路徑的
             * class : 配置Action類的全路徑(默認值是ActionSupport類)
             * method : 指定調用Action中的哪個方法來處理請求,如果不指定,默認值是execute

       3.result : 配置結果
             * name : 結果頁面邏輯視圖名稱
             * type : 指定調用哪一個result類來處理結果,默認使用轉發
             * 標籤體 : 填寫頁面的相對路徑
    -->
    <package name="hello" namespace="/hello" extends="struts-default" >
        <action name="HelloAction" class="com.xiaoming.controller.HelloAction" method="execute" >
            <result name="success" type="dispatcher" >/index.jsp</result>
        </action>
    </package>
</struts>

struts2常量配置

struts2默認常量配置位置

image

修改struts2常量配置方式

  • 在src/struts.xml中(重要)
 <constant name="key" value="value"></constant>
  • 在src下創建struts.properties(瞭解)
//以鍵值對的形式
struts.i18n.encoding=UTF-8
  • 在web.xml文件中(瞭解)
在StrutsPrepareAndExecuteFilter配置文件中配置初始化參數
<!-- 配置常量 在覈心過濾器標籤下 -->
  <init-param>
    <param-name>struts.i18n.encoding</param-name>
    <param-value>UTF-8</param-value>
  </innit-param>

常量配置文件加載順序

image

常量配置

    <!-- i18n:國際化. 解決post提交亂碼 get亂碼自己解決  -->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!-- 指定反問action時的後綴名 
        http://localhost:8080/struts2_day01/hello/HelloAction.action
    -->
    <constant name="struts.action.extension" value="action"></constant>
    <!-- 指定struts2是否以開發模式運行
            1.熱加載主配置.(不需要重啓即可生效)
            2.提供更多錯誤信息輸出,方便開發時的調試
            項目上線的時候設置爲 false
     -->
    <constant name="struts.devMode" value="true"></constant>
* struts.serve.static.browserCache=true
    -- 設置瀏覽器是否緩存靜態內容,默認值爲true(生產環境下使用),開發階段最好關閉 
* struts.configuration.xml.reload=false
    -- 當struts的配置文件修改後,系統是否自動重新加載該文件,默認值爲false(生產環境下使用)

分模塊開發配置

    <!-- 引入其他struts配置文件 -->
    <include file="cn/itheima/b_dynamic/struts.xml"></include>
    <include file="cn/itheima/c_default/struts.xml"></include>

struts2配置進階

動態方法調用

  • ==通配符方式(重要)==
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

    <package name="dynamic" namespace="/dynamic" extends="struts-default" >
        <!-- 
            通配符方式:
              使用{1} 取出第一個星號通配的內容

              訪問的url :
               http://localhost:8080/項目名/namespace/actionName_方法名.後綴
        -->
        <action name="Demo1Action_*" class="cn.itheima.b_dynamic.Demo1Action" method="{1}" >
                <result name="success" >/hello.jsp</result>
        </action>
    </package>
</struts>
  • 配置動態方法調用方法常量
        <!-- 配置動態方法調用是否開啓常量
                默認是關閉的,需要開啓(true)

                訪問的url : http://localhost:8080/項目名/namespace/actionName 方法名!後綴

                不利於seo優化
         -->
    <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>

struts2中的默認配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
        <package name="default" namespace="/default" extends="struts-default" >
            <!-- 找不到包下的action,會使用Demo2Action作爲默認action處理請求 -->
            <default-action-ref name="Demo2Action"></default-action-ref>
            <!-- 常見默認值 -->
            <!-- method屬性:execute  -->
            <!-- result的name屬性:success  -->
            <!-- result的type屬性:dispatcher 轉發  -->
            <!-- class屬性:com.opensymphony.xwork2.ActionSupport -->
            <action name="Demo2Action"   >
                <result  >/hello.jsp</result>
            </action>
        </package>
</struts>

Action類的三種寫法

1. 配置文件學習完成,下面的重點是Action類的三種寫法
   /* 寫一個POJO類
        * 什麼是POJO類,POJO(Plain Ordinary Java Object)簡單的Java對象.
          簡單記:沒有繼承某個類,沒有實現接口,就是POJO的類。

    * 實現Action接口
        * Action接口中定義了5個常量,5個常量的值對應的是5個邏輯視圖跳轉頁面
          (跳轉的頁面還是需要自己來配置),還定義了一個方法,execute方法。
        * 大家需要掌握5個邏輯視圖的常量(實際上就是一個字符串)
            * SUCCESS       -- 成功.
            * INPUT         -- 用於數據表單校驗.如果校驗失敗,跳轉INPUT視圖.
            * LOGIN         -- 登錄.
            * ERROR         -- 錯誤.
            * NONE          -- 頁面不轉向.
        * 給我們提供上述的常量只是爲了統一規範

    * 繼承ActionSupport類(開發中這種方式使用最多)
        *  幫我們實現了 Validateable, ValidationAware, TextProvider, LocaleProvider 等接口
        *  如果我們需要用到這些接口的實現時,不需要自己來實現了
發佈了25 篇原創文章 · 獲贊 5 · 訪問量 6661
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章