框架之Struts2


相比較hibernate簡單了許多

案例:使用Struts2框架完成登錄功能


需求分析

1. 使用Struts2完成登錄的功能

技術分析之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框架前端的控制器就是過濾器

 

技術分析之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包的壓縮格式是一樣的,所以可以自己修改后綴名,解壓。
    * 找到解壓后的應用,打開WEB-INF/lib目錄下所以的jar包。復制到工程中,就可以了。

5. 需要配置Struts2的前端控制器,注意:這一步是必須要做的操作,這是Struts2核心的控制器。
    * Struts2的前端控制器就是一個過濾器,那么過濾器相關知識咱們都學習過,需要在web.xml中進行配置。
    * 前端控制器的類的路徑和名稱:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    * 具體配置如下
      <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. Action類是動作類,是Struts2處理請求,封裝數據,響應頁面的核心控制器。需要自己編寫。
    package cn.itcast.action;
        public String sayHello(){
        System.out.println("Hello Struts2!!");
        return null;
    }

技術分析之編寫Struts的配置文件

1. 配置文件名稱是struts.xml(名稱必須是struts.xml)
2. 在src下引入struts.xml配置文件(配置文件的路徑必須是在src的目錄下)
3. 配置如下
    <?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="/" extends="struts-default">
            <action name="hello" class="com.itheima.action.HelloAction" method="sayHello">
            </action>
        </package>
    </struts>

入門總結之Struts2的執行流程

1. 執行的流程
    * 編寫的頁面,點擊超鏈接,請求提交到服務器端。
    * 請求會先經過Struts2的核心過濾器(StrutsPrepareAndExecuteFilter)
        * 過濾器的功能是完成了一部分代碼功能
        * 就是一系列的攔截器執行了,進行一些處理工作。
        * 咱們可以在struts-default.xml配置文件中看到有很多的攔截器。可以通過斷點的方式來演示。
        * 攔截器執行完后,會根據struts.xml的配置文件找到請求路徑,找到具體的類,通過反射的方式讓方法執行。

2. 總結
    * JSP頁面-->StrutsPrepereAndExecuteFilter過濾器-->執行一系列攔截器(完成了部分代碼)-->執行到目標Action-->返回字符串-->結果頁面(result)-->頁面跳轉


入門總結之Struts2框架配置文件加載的順序

0. 需要掌握
    * 加載了哪些個配置文件(重點的)
    * 配置文件的名稱是什么
    * 配置文件的位置
    * 配置文件的作用

1. Struts2框架的核心是StrutsPrepareAndExecuteFilter過濾器,該過濾器有兩個功能
    * Prepare       -- 預處理,加載核心的配置文件
    * Execute       -- 執行,讓部分攔截器執行

2. StrutsPrepareAndExecuteFilter過濾器會加載哪些配置文件呢?
    * 通過源代碼可以看到具體加載的配置文件和加載配置文件的順序
        * init_DefaultProperties();                 -- 加載org/apache/struts2/default.properties
        * init_TraditionalXmlConfigurations();      -- 加載struts-default.xml,struts-plugin.xml,struts.xml
        * init_LegacyStrutsProperties();            -- 加載自定義的struts.properties.
        * init_CustomConfigurationProviders();      -- 加載用戶自定義配置提供者
        * init_FilterInitParameters() ;             -- 加載web.xml

3. 重點了解的配置文件
    * default.properties        -- 在org/apache/struts2/目錄下,代表的是配置的是Struts2的常量的值
    * struts-default.xml        -- 在Struts2的核心包下,代表的是Struts2核心功能的配置(Bean、攔截器、結果類型等)
    * struts.xml                -- 重點中的重點配置,代表WEB應用的默認配置,在工作中,基本就配置它就可以了!!(可以配置常量)
    * web.xml                   -- 配置前端控制器(可以配置常量)

    * 注意:
        * 前3個配置文件是struts2框架的默認配置文件,基本不用修改。
        * 后3個配置文件可以允許自己修改struts2的常量。但是有一個特點:后加載的配置文件修改的常量的值,會覆蓋掉前面修改的常量的值。

4. 總結(重點掌握的配置文件)
    * 先加載default.properties文件,在org/apache/struts2/default.properties文件,都是常量。
    * 又加載struts-default.xml配置文件,在核心的jar包最下方,struts2框架的核心功能都是在該配置文件中配置的。
    * 再加載struts.xml的配置文件,在src的目錄下,代表用戶自己配置的配置文件
    * 最后加載web.xml的配置文件

    * 后加載的配置文件會覆蓋掉之前加載的配置文件(在這些配置文件中可以配置常量)

5. 注意一個問題
    * 哪些配置文件中可以配置常量?
        * default.properties        -- 默認值,咱們是不能修改的!!
        * struts.xml                -- 可以配置,開發中基本上都在該配置文件中配置常量
        * struts.properties         -- 可以配置,基本不會在該配置文件中配置
        * web.xml                   -- 可以配置,基本不會在該配置文件中配置

    * 后加載的配置文件會覆蓋掉之前加載的配置!!

入門總結之struts.xml配置文件的配置

1. <package>標簽,如果要配置<Action>的標簽,那么必須要先配置<package>標簽,代表的包的概念
    * 包含的屬性
        * name                  -- 包的名稱,要求是唯一的,管理action配置
        * extends               -- 繼承,可以繼承其他的包,只要繼承了,那么該包就包含了其他包的功能,一般都是繼承struts-default
        * namespace             -- 名稱空間,一般與<action>標簽中的name屬性共同決定訪問路徑(通俗話:怎么來訪問action),常見的配置如下
            * namespace="/"     -- 根名稱空間
            * namespace="/aaa"  -- 帶有名稱的名稱空間
        * abstract              -- 抽象的。這個屬性基本很少使用,值如果是true,那么編寫的包是被繼承的

2. <action>標簽
    * 代表配置action類,包含的屬性
        * name          -- 和<package>標簽的namespace屬性一起來決定訪問路徑的
        * class         -- 配置Action類的全路徑(默認值是ActionSupport類)
        * method        -- Action類中執行的方法,如果不指定,默認值是execute

3. <result>標簽
    * action類中方法執行,返回的結果跳轉的頁面
        * name      -- 結果頁面邏輯視圖名稱
        * type      -- 結果類型(默認值是轉發,也可以設置其他的值)

入門總結之Struts2配置常量

1. 可以在Struts2框架中的哪些配置文件中配置常量?
    * struts.xml(必須要掌握,開發中基本上就在該配置文件中編寫常量)
        * <constant name="key" value="value"></constant>
    * web.xml
        * 在StrutsPrepareAndExecuteFilter配置文件中配置初始化參數
    * 注意:后加載的配置的文件的常量會覆蓋之前加載的常量!!

2. 需要大家了解的常量
    * struts.i18n.encoding=UTF-8            -- 指定默認編碼集,作用於HttpServletRequest的setCharacterEncoding方法 
    * struts.action.extension=action,,      -- 該屬性指定需要Struts 2處理的請求后綴,該屬性的默認值是action,即所有匹配*.action的請求都由Struts2處理。如果用戶需要指定多個請求后綴,則多個后綴之間以英文逗號(,)隔開
    * struts.serve.static.browserCache=true     -- 設置瀏覽器是否緩存靜態內容,默認值為true(生產環境下使用),開發階段最好關閉 
    * struts.configuration.xml.reload=false     -- 當struts的配置文件修改后,系統是否自動重新加載該文件,默認值為false(生產環境下使用) 
    * struts.devMode = false                    -- 開發模式下使用,這樣可以打印出更詳細的錯誤信息 

入門總結之指定多個struts的配置文件(了解)

1. 在大部分應用里,隨着應用規模的增加,系統中Action的數量也會大量增加,導致struts.xml配置文件變得非常臃腫。
    為了避免struts.xml文件過於龐大、臃腫,提高struts.xml文件的可讀性,我們可以將一個struts.xml配置文件分解成多個配置文件,然后在struts.xml文件中包含其他配置文件。

2. 可以在<package>標簽中,使用<include>標簽來引入其他的struts_xx.xml的配置文件。例如:
    <struts>
        <include file="struts-part1.xml"/>
        <include file="struts-part2.xml"/>
    </struts>

3. 注意注意注意(重要的事情說三遍):<include file="cn/itcast/demo2/struts-part1.xml"/>

技術分析之Action類的三種寫法

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

    * Action類可以實現Action接口
        * Action接口中定義了5個常量,5個常量的值對應的是5個邏輯視圖跳轉頁面(跳轉的頁面還是需要自己來配置),還定義了一個方法,execute方法。
        * 大家需要掌握5個邏輯視圖的常量
            * SUCCESS       -- 成功.
            * INPUT         -- 用於數據表單校驗.如果校驗失敗,跳轉INPUT視圖.
            * LOGIN         -- 登錄.
            * ERROR         -- 錯誤.
            * NONE          -- 頁面不轉向.

    * Action類可以去繼承ActionSupport類(開發中這種方式使用最多)
        * 設置錯誤信息


技術分析之Action的訪問

1. 通過<action>標簽中的method屬性,訪問到Action中的具體的方法。
    * 傳統的配置方式,配置更清晰更好理解!但是擴展需要修改配置文件等!
    * 具體的實例如下:
        * 頁面代碼
            * <a href="${pageContext.request.contextPath}/addBook.action">添加圖書</a>
            * <a href="${pageContext.request.contextPath}/deleteBook.action">刪除圖書</a>

        * 配置文件的代碼
            <package name="demo2" extends="struts-default" namespace="/">
                <action name="addBook" class="cn.itcast.demo2.BookAction" method="add"></action>
                <action name="deleteBook" class="cn.itcast.demo2.BookAction" method="delete"></action>
            </package>

2. 通配符的訪問方式:(訪問的路徑和方法的名稱必須要有某種聯系.)  通配符就是 * 代表任意的字符
    * 使用通配符的方式可以簡化配置文件的代碼編寫,而且擴展和維護比較容易。
    * 具體實例如下:
        * 頁面代碼
            <a href="${pageContext.request.contextPath}/order_add.action">添加訂單</a>
            <a href="${pageContext.request.contextPath}/order_delete.action">刪除訂單</a>

        * 配置文件代碼
            * <action name="order_*" class="cn.itcast.demo2.OrderAction" method="{1}"></action>

    * 具體理解:在JSP頁面發送請求,http://localhost/struts2_01/order_add.action,配置文件中的order_*可以匹配該請求,*就相當於變成了add,method屬性的值使用{1}來   代替,{1}就表示的是第一個*號的位置!!所以method的值就等於了add,那么就找到Action類中的add方法,那么add方法就執行了!

3. 動態方法訪問的方式(有的開發中也會使用這種方式)
    * 如果想完成動態方法訪問的方式,需要開啟一個常量,struts.enable.DynamicMethodInvocation = false,把值設置成true。
        * 注意:不同的Struts2框架的版本,該常量的值不一定是true或者false,需要自己來看一下。如果是false,需要自己開啟。
        * 在struts.xml中開啟該常量。
            * <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    * 具體代碼如下
        * 頁面的代碼
            * <a href="${pageContext.request.contextPath}/product!add.action">添加商品</a>
            * <a href="${pageContext.request.contextPath}/product!delete.action">刪除商品</a>

        * 配置文件代碼
            * <action name="product" class="cn.itcast.demo2.ProductAction"></action>

案例代碼就不貼了...

 
        
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM