Struts2開發流程

1.struts2的開發流程

  • 在web.xml文件中定義核心Filter攔截用戶請求。java

<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>
  • 經過post或get提交請求。web

  • 定義處理用戶請求的Action類。
    在MVC框架中,控制器C其實是由攔截全部用戶請求,處理請求的通用代碼兩個部分共同組成的,實際的業務邏輯則由Action來處理。apache

MVC框架的底層機制:app

核心Servlet或Filter接收到用戶的請求後,一般會對用戶請求進行簡單處理,例如解析、封裝參數等,而後經過反射來建立Action實例,並經過調用Action的制定方法來處理用戶請求。框架

  • 配置Action。jsp

  • 配置處理結果和物理視圖的映射關係。post

  • 編寫視圖資源。url

2. struts2配置文件

struts2的默認配置文件爲struts.xml,該文件應放在web應用的類加載路徑下,一般在WEB-INF/classes路徑下。struts.xml的最大做用是配置Action和請求之間的對應關係,並配置邏輯視圖名和物理視圖資源之間的相對關係,即返回結果和jsp文件的物理位置的關係。spa

struts2配置常量共有三種方式:code

  1. 經過struts.properites文件

  2. 經過struts.xml配置文件(推薦在此文件定義struts屬性)

  3. 經過Web應用的web.xml文件

一般struts2框架按如下搜索順序進行加載。

  • struts-default.xml

  • struts-plugin.xml

  • struts.xml

  • struts.properties

  • web.xml

若是多個文件中配置了同一個struts常量,最後一個文件的配置會覆蓋前面文件的配置。
爲避免struts.xml的文件過大,可將配置文件分解成多個配置文件,而後在struts.xml文件中包含其餘配置文件。

<include file="struts-part1.xml"/>

3. 實現Action

爲了使開發的Action更規範,Struts2提供了一個Action接口,定義了Struts2的Action處理應該實現的規範。

public interface Action {  
  
    //定義Action接口裏包含的一些結果字符串  
    public static final String ERROR = "error";  
    public static final String INPUT = "input";  
    public static final String LOGIN = "login";  
    public static final String NONE = "none";  
    public static final String SUCCESS = "success";  
      
    //定義處理用戶請求的execute()方法  
    public String execute() throws Exception;  
}

上面的Action接口裏只定義了一個execute()方法,該接口規範規定了Action類應該包含一個execute()方法,該方法返回一個字符串,此外,該接口還定義了5個字符串常量,他的做用是統一execute()方法的返回值。除此以外,struts2爲Action接口提供了一個實現類:ActionSuport。該類提供了許多默認方法,好比默認的用戶請求處理方法,數據校驗方法等,通常Action類繼承ActionSuport類。

4. 配置Action

struts2框架中的核心組件就是Action、攔截器等,struts2利用package和namespace來對多個Action和攔截器進行管理。

<!-- package提供了將多個Action組織爲一個模塊的方式
        package的名字必須是惟一的 package能夠擴展 當一個package擴展自
        另外一個package時該package會在自己配置的基礎上加入擴展的package
        的配置 父package必須在子package前配置 
        name:package名稱
        extends:繼承的父package名稱
        abstract:設置package的屬性爲抽象的 抽象的package不能定義action 值true:false
        namespace:定義package命名空間 該命名空間影響到url的地址,例如此命名空間爲/test那麼訪問是的地址爲http://localhost:8080/struts2/test/XX.action
     -->
    <package name="com.kay.struts2" extends="struts-default" namespace="/test">
        <interceptors>
            <!-- 定義攔截器 
                name:攔截器名稱
                class:攔截器類路徑
             -->
            <interceptor name="timer" class="com.kay.timer"></interceptor>
            <interceptor name="logger" class="com.kay.logger"></interceptor>
            <!-- 定義攔截器棧 -->
            <interceptor-stack name="mystack">
                <interceptor-ref name="timer"></interceptor-ref>
                <interceptor-ref name="logger"></interceptor-ref>
            </interceptor-stack>
            
             <!-- 定義默認的攔截器 每一個Action都會自動引用
         若是Action中引用了其它的攔截器 默認的攔截器將無效 -->
        <default-interceptor-ref name="mystack"></default-interceptor-ref>
        
        
        <!-- 全局results配置 -->
        <global-results>
            <result name="input">/error.jsp</result>
        </global-results>
        
        <!-- Action配置 一個Action能夠被屢次映射(只要action配置中的name不一樣)
             name:action名稱
             class: 對應的類的路徑
             method: 調用Action中的方法名
        -->
        <action name="hello" class="com.kay.struts2.Action.LoginAction">
            <!-- 引用攔截器
                name:攔截器名稱或攔截器棧名稱
             -->
            <interceptor-ref name="timer"></interceptor-ref>
        
            <!-- 節點配置
                name : result名稱 和Action中返回的值相同
                type : result類型 不寫則選用superpackage的type struts-default.xml中的默認爲dispatcher
             -->
         <result name="success" type="dispatcher">/talk.jsp</result>
         <!-- 參數設置 
             name:對應Action中的get/set方法 
         -->
         <param name="url">http://www.sina.com</param>
        </action>
        </interceptors>
    </package>
相關文章
相關標籤/搜索