Struts2知識複習之一

#Struts2知識複習之一

  1. 概述:struts2是一個基於MVC設計模型的輕量級web應用框架,它本質上相當於servlet。
    它是 Struts1(早期基於MVC模式的輕量級Web框架) 和 WebWork(openSymphony組織的J2EE Web框架)技術的合併。
    它的核心是WebWork,採用攔截器的機制來處理用戶請求,使業務邏輯控制器與ServletAPI脫離。
  2. struts2優勢:
    • 提供Exception異常處理機制
    • 提供良好的Ajax支持
    • Result方式的頁面導航,通過Result標籤實現重定向和頁面跳轉。
    • 開源,擴展性強
  3. web層框架(struts1,struts2,webwork,springMVC)都基於前端控制器的模式
    • 什麼前端控制器模式?
      概述:傳統開發中,每一個請求都會對應一個Servlet,這樣就會導致很多的Servlet。
      而Struts2框架將所有請求都經過一個前端控制器,通過攔截器來過濾,實現部分功能後,
      將剩下具體的操作提交到具體的Action進行處理。

      struts2入門基本

      1. Struts2開發包目錄
        • apps:存放Struts2實例程序
        • docs:Struts2的API參考文檔
        • lib:Struts2的核心類庫,以及第三方插件類庫。
        • src:Struts2的框架源碼
      2. web工程引入的struts2開發包
        概述:實際開發中, 因爲我們不需使用lib目錄下所有jar包,所以我們引入的是
        apps\struts2-blank\WEB-INF\lib 目錄下的jar包。
        struts2開發jar包分析:
        struts2-core-2.3.24.jar Struts2核心類庫
        xwork-core-2.3.24.jar webWork核心類庫,Struts2構建的基礎
        ognl-3.0.6.jar 對象圖導航語言(Object Graph Navigation Language) Struts2通過其讀寫對象的屬性。
        freemarker-2.3.22.jar Struts2標籤模板使用的類庫
        log4j-api-2.2.jar Struts2日誌管理組件依賴包的api
        log4j-core-2.2.jar Struts2日誌管理組件依賴包
        commons-fileupload-1.3.1.jar Struts2文件上傳組件依賴包
        commons-io-2.2.jar Struts2的輸出輸入,傳文件依賴的jar包
        commons-lang3-3.2.jar 包含一些數據類型工具,是對java.lang包的增強
        javassist-3.11.0.GA.jar javascript字節碼解析器
        asm-3.3.jar 操作字節碼類庫
        asm-commons-3.3.jar 提供基於事件的表現形式。 asm-tree-3.3.jar 提供基於對象的表現形式。

        Struts2配置詳解

        & 基本配置環境搭建
        struts.xml文件的約束:
        <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd"&gt;
        頭標籤:<struts></struts>
        & Struts2執行流程:
        從客戶端發送的請求,會先經過前端控制器(核心過濾器 StrutsPrepareAndExecuteFilter )過濾器中執行一組攔截器,完成部分功能。
        執行完攔截器後,就會執行Action,返回一個結果視圖,根據Result配置進行頁面的跳轉。

      3. struts.xml文件配置
        (1)常量配置(使用<content></content>)
        注:所有常量配置都可在struts2-core-2.3.24.jar包下的/org/apache/struts2/default.properties文件中找到
        常量的配置屬性:
        方式一(基於struts.xml文件)
        <1> i18n:國際化編碼,解決Post提交亂碼。
        示例:
        <constant name="struts.i18n.encoding" value="UTF-8"></constant>
        <2> struts.action.extension=action,, 指定訪問action時的後綴名, action,, 爲默認值
        action,, 代表後綴名爲action或空 (兩個 , 符號代表空)。
        示例:
        <constant name="struts.action.extension" value="action,,"></constant>
        <3>struts.devMode = false(默認) 指定struts2是否以開發模式運行,開發模式具有以下優點:
        1.熱加載主配置文件(不需要重啓即可生效)
        2.提供更多錯誤信息輸出,方便開發時的調試
        示例:
        <constant name="struts.devMode" value="true"></constant>
        <4>配置動態方法調用是否開啓
        示例:struts.enable.DynamicMethodInvocation = false(默認) 默認是關閉,使用需手動開啓
        分析:
        配置後瀏覽器訪問服務器數據的格式爲:Action類後 + !+對應的方法名
        如:http://localhost/struts2_01/dynamic/Demo1Action!query
        這種動態方法常量配置會導致 地址欄的名稱怪異,不利於SEO搜索引擎的檢索
        方式二(基於web.xml文件)
        配置struts2的編碼爲utf-8到整個web應用中
        <context-param>
        <param-name>struts.i18n.encoding</param-name>
        <param-value>UTF-8</param-value>
        </context-param>
        方式三(基於 在src下重寫一個常量配置文件 default.properties覆蓋框架已有的常量配置文件)
        (2)基本配置
        <package name="" namespace="" extends="struts-default">
        <action name="" class="" method="">
        <result name="success">/xxx.jsp</result>
        </action>
        </package>
        細述:
        <1>父標籤package,將多個Action封裝到一個包裏。其屬性如下:
        • name:包名,起到標識作用,隨便起但不能重複。
        • namespace:給Action的訪問路徑定義一個命名空間。
        • extend:繼承Struts2框架下的一個指定包struts-default的所有配置
          該屬性標識 該包是否爲抽象,若爲true則說明該包不能獨立運行,只是專門被繼承的
          <2>一級子標籤<action>,配置action類。其屬性如下:
          • name:決定了action的資源訪問名
          • class:action的完整類名
          • method:調用actionl類中哪個方法來處理請求。
            <3>一級子標籤<default-action-ref>
            <default-action-ref name="xx.dd.Demo2Action"></default-action-ref>
            當訪問找不到包下的ation,會使用Demo2Action作爲默認的action處理請求
            <3>二級子標籤<result>,結果配置
          • name屬性:標識處理結果的名稱,與Action類方法的返回值對應
          • type屬性:指定調用哪一個result類來處理結果,默認使用 轉發 進行結果處理。
            & 結果處理方式:
            1 type="dispatcher" 請求轉發
            2 type="redirect" 重定向
            3 重定向到另一個Action(常用) Demo1Action / ${name} 4 請求轉發到另一個Action(不常用瞭解即可) Demo1Action / & 標籤體內容:填寫跳轉頁面的相對路徑 <4>二級子標籤 (3)引入src路徑下其他的struts.xml文件,格式如下: (4)配置攔截器,格式如下: add,delete
      4. 配置核心過濾器
        概述:所有的WEB框架都有基於 前端控制器(核心過濾器)模式的特點。
        示例: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /*
      5. Struts2配置文件加載順序
        概述:每次從客戶端發送請求到服務器都要經過Struts2的核心過濾器StrutsPrepareAndExecuteFilter,該過濾器有預處理和執行的功能。
        • 預處理主要用來加載配置文件,對應過濾器的init()方法。
        • 執行用來執行一組攔截器完成部分功能,對應攔截器的doFilter()方法。
          詳解doFilter()方法中對Struts2配置文件的加載順序:
          (1)先加載struts.xml文件,對應配置action以及常量等。
          (2)後加載struts.properties文件,對應配置常量等。
          (3)最後加載web.xml文件,對應配置核心過濾器以及常量。

          Action類的編寫

          1 概述:Action作爲框架的核心類,也作爲業務邏輯控制器,實現對用戶請求處理,每一次請求都對應一個獨立的Action類工作單元.
          Action類是一個POJO類(plain ordinary java object 簡單的java類)具有一部分getter/setter方法,不繼承任何父類,不實現任何接口
          有一個共有無參構造(默認) 和一個execute方法(public權限修飾,字符串返回類型,方法爲空參)。
          滿足上述要求的POJO類可算作Action類實現。除此之外,Struts2框架還提供了Action類的其他實現方式。
          2 Action類的實現
          (1)方式一:實現Action(com.opensymphony.xwork2.Action)接口
          代碼示例:
          public class HelloAction implements Action {br/>@Override
          public String execute() throws Exception {
          System.out.println("hello world!");
          return "success";
          }
          }
          但是由於該接口定義了一個execute方法以及五個基本常量:

        • SUCESS 成功跳轉 NONE 不跳轉 ERROR 跳轉到錯誤處理頁面
        • INPUT 數據校驗時要跳轉的路徑 LOGIN 跳轉到登錄頁面
          爲開發者提供幫助小,實際開發一般不用,而是使用繼承ActionSupport類。
          (2)方式二:繼承ActionSupport類
          代碼示例:
          public class HelloAction extends ActionSupport {
          }
          ActionSupport類本身實現了Action接口,除此還實現其他接口,爲用戶提供更多的功能。
          實際上,ActionSupport是Struts2的默認Action處理類,繼承該類可簡化Action開發。
          3 Action類的訪問
          (1)使用通配符
          配置Action動態方法(解決一個Action類處理一個模塊中多個請求)
          示例:
          <action name="Demo1Action*" class="xxxx.Demo1Action" method="{1}">
          <result name="success">/hello.jsp</result>
          </action>
          分析:
          Demo1Action
          爲 Action類的 方法名,與method="{1}"(取出第一個通配符的內容)中的 1 對應,
          若Demo1Action** 則method="{2}"
          擴展:值得一提,<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
          常量配置是實現另一種Action方法的方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章