Struts2 入門


Struts2的執行過程及原理

簡要:
用戶發起請求 → StrutsPrepareAndExecuteFilter核心控制器 → interceptor攔截器
→ Action類中 execute → result 結果頁面 →響應


環境搭建

  • apps: 該文件夾包含了基於struts2的示例應用
  • docs: 該文件夾包含了struts2的文檔,包括struts2快速入門、struts2的文檔以及API等
  • lib: 該文件夾包含了struts2框架核心類庫,以及struts2第三方插件類庫
  • src: 該文件夾包含了struts2框架的全部源代碼

Struts2中用到的一些jar包簡介

  • struts2-core-2.3.15.1.jar Struts2框架的核心類庫 xwork-core-2.3.15.1.jar
  • Command模式框架,WebWork和Struts2都基於xwork ognl-3.0.6.jar Object Graph
  • Navigation Language 對象圖導航語言,struts2框架通過它來讀寫對象的屬性
  • freemarker-2.3.19.jar Struts2的UI標籤的模板使用freeMarker編寫
  • commons-logging-1.1.3.jarASD出品的日誌包,Struts2框架使用這個日誌包來支持Log4J和JDK1.4+的日誌記錄
  • commons-lang3-3.1.jar對java.lang包的增強 commons-io-2.0.1.jar 傳輸文件依賴的jar包
  • commons-fileupload-1.3.jar 文件上傳組件,2.1.6版本後需要加入此文件
    開發中爲了方便,基礎的jar包可以直接導入apps\struts2-blank\WEB-INF\lib中的jar包

配置Struts2核心控制器

在web.xml中配置Struts2

<filter>
   //配置核心Filter的名字
    <filter-name>struts2</filter-name>
   //配置核心Filter的類名
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

   </filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    //要攔截的URL,/*指攔截所有用戶
    <url-pattern>/*</url-pattern>
</filter-mapping>

配置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>
    <package name="default" namespace="/" extends="struts-default">
        <action name="hello" class="com.java.action.HelloAction">
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>

Struts2配置

  • default.properties:默認的常量配置。該文件保存在struts2-core-2.3.7.jar中org.apache.struts2包裏面
  • struts-default.xml:Bean、攔截器、結果類型。該文件保存在struts2-core-2.3.7.jar
  • struts-plugin.xml:插件的配置信息。該文件保存在struts-Xxx-2.3.7.jar
  • struts.xml:web應用默認的struts配置文件,配置action或常量。
  • struts.properties:配置常量。該文件是Struts的默認配置文件
  • web. xml:配置struts2,監聽器,過濾器,常量。該文件是 Web 應用的配置文件

後加載文件中struts2常量會覆蓋之前加載文件常量內容


Struts2的Action配置

當我們編寫完Action類後,就可以在struts.xml文件中配置該Action。在struts.xml中配該Action就是讓Struts2容器知道該Action的存在,並且能調用該Action來處理用戶請求。
Struts 2使用包來組織Action,因此,將Action定義放在包定義下完成,定義Action通過使用<package>下的<action>標籤來完成。定義action同時要給出name屬性和class屬性。

package的屬性

<package name="p1" extends="" namespace="" abstract="">

name:包名稱,在struts2的配置文件中,包名不能重複 ,name並不是真正包名,只是爲了管理Action
namespace:namespace屬性和name屬性,決定 Action的訪問路徑 (以/開始 )
extends:extends表示繼承自哪個包,通常開發中繼承 struts-default 包 (struts-default包在 struts-default.xml定義 )

name屬性必選,唯一值
extends屬性可選
namespace屬性可選,定義了包的命名空間
abstract屬性可選,在當前包下是否爲一個抽象包,抽象包不能包含Action

action的屬性

name:該action的名字,同時也是也是需要處理的URL前半部分。<action>的name 和 <package>的namespace屬性 共同決定 Action的訪問路徑
例如 :訪問路徑 /user/hello.action

   <package name="default" namespace="/user" extends="struts-default">
   <action name="hello" class="com.java.struts2.HelloAction">

class:指定了該Action的實現類,如果不指定,默認ActionSupport類


Action只是一個控制器,它並不直接對瀏覽器生成響應,所以在Action處理完用戶的請求後,Action需要將指定的視圖資源展示給用戶,要配置映射關係,用<result>標籤。<result>元素有兩個屬性,name和type,系統默認name屬性是success,type屬性是dispatch。

每個result標籤都代表了一個可能輸出的結果。當Action類的方法執行完成時,它返回一個字符串作爲結果,框架根據這個結果選擇對應的result(result的name屬性),向用戶輸出結果頁面。在com.opensymphony.xwork2.Action接口中定義了一組標準的結果代碼,可供開發人員使用,當然了只有我們的action繼承ActionSupport 這個類纔可以使用下面的結果代碼,後面再來詳細總結結果類型。

public interface Action{
       public static final String SUCCESS = “success”;
       public static final String NONE = “none”;
       public static final String ERROR = “error”;
       public static final String INPUT = “input”;
       public static final String LOGIN = “login”;
  }

返回結果 解釋
SUCCESS Action執行成功,返回相應的視圖,success是 name屬性的默認值
NONE Action執行成功,但並不返回任何視圖
ERROR Action執行失敗,返回到 錯誤處理視圖
INPUT Action在執行時需要從前端界面獲取參數,INPUT就是代表這個輸入參數的界面,通常會對這些參數進行驗證,如果驗證沒有通過,將自動返回到該視圖
LOGIN Action因爲用戶沒有登陸,將返回該登陸視圖,要求用戶進行 登陸驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章