Struts2 整理

1. struts2詳解

Struts2 = Struts1 + Xwork

1.1 Struts2開發流程:

版本: 2.3

1.1.1 引入jar文件

commons-fileupload-1.2.2.jar 【文件上傳相關包】
commons-io-2.0.1.jar
struts2-core-2.3.4.1.jar 【struts2核心功能包】
xwork-core-2.3.4.1.jar 【Xwork核心包】
ognl-3.0.5.jar 【Ognl表達式功能支持表】
commons-lang3-3.1.jar 【struts對java.lang包的擴展】
freemarker-2.3.19.jar 【struts的標籤模板庫jar文件】
javassist-3.11.0.GA.jar 【struts對字節碼的處理相關jar】

1.1.2 配置web.xml

Tomcat啓動— 加載自身web.xml—加載所有項目的web.xml
通過在項目的web.xml中引入過濾器,
– Struts的核心功能的初始化,通過過濾器完成
– filter 【 (攔截器的標籤)
————-init/ 啓動執行
————-doFilter/ 訪問執行
————-destroy
————-】


<!-- web.xml:  引入struts核心過濾器 -->
<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>

StrutsPrepareAndExecuteFilter 即爲核心過濾器
來自jar包:struts2-core-2.3.4.1.jar
使用的struts的版本不同,核心過濾器類是不一樣的!
struts1的核心過濾器就不是這個

1.1.3 開發Action

  1. struts中的action類取代之前的servlet
    action類,也叫做動作類; 一般繼承ActionSupport類(即處理請求的類 )
  2. action中的業務方法,處理具體的請求
    必須返回String
    方法不能有參數
public class HelloAction extends ActionSupport {
    // 處理請求
    public String execute() throws Exception {}
}

1.1.4 配置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>
    <!--  Overwrite Convention -->
    <package name="xxx" extends="struts-default">
        <action name="hello" class="com.appp.action.HelloAction" method="execute">
            <result name="success">/success.jsp</result>
        </action>
    </package>

</struts>
package:  定義一個包。包作用,管理action(通常一個業務模板一個包)
    name:包的名字,包名不可重複
    extends:當前包繼承自哪個包
        Struts中,包一定繼承struts-default
        struts-default是在struts-default.xml中定的包
    abstract
        表示當錢包爲抽象包;抽象包中不能再有action的定義,否則運行時報錯
        sbstract=true  只有噹噹前的包被其他包繼承時才用!
        比如:
            <package name="base" extends="struts-default abstract="true"></package>
            <package name="user" extends="base"></package>
    namespace:  名稱空間,默認爲"/",即jsp中什麼都不用寫,
                作爲路徑的一部分,訪問路徑= http://localhost:8080/項目名/名稱空間/ActionName

action:  配置請求路徑與Action類的映射關係
    name: 請求路徑名稱
    class:請求路徑的action類的全名
    method:請求處理方法
result:
    name:action處理方法返回值
    type:跳轉的結果類型
    標籤中指定跳轉的頁面

1.2 Struts2執行流程:

服務器啓動:

1. 加載項目web.xml
2. 創建Struts核心過濾器對象, 執行filter →  init()

struts-default.xml, 核心功能的初始化
struts-plugin.xml, struts相關插件
struts.xml 用戶編寫的配置文件

訪問:

3. 用戶訪問Action, 服務器根據訪問路徑名稱,找對應的aciton配置, **創建action對象**(後面每次訪問,都會創建action實例)
4. 執行默認攔截器棧中定義的**18個攔截器**(總共定義的有32個攔截器)
5. 執行action的**業務處理方法**

1.3 struts-default.xml 詳解:

1.3.1 目錄: struts2-core-2.3.4.1.jar/ struts-default.xml

1.3.2 內容:

  1. bean節點指定struts在運行的時候創建的對象類型
  2. 指定struts-default包 【用戶寫的package(struts.xml)一樣要繼承此包 】,
    包中定義了:
    2.1 跳轉的結果類型
    dispatcher 轉發,不指定默認爲轉發
    redirect 重定向
    redirectAction 重定向到action資源
    stream (文件下載的時候用)
    2.2 定義了所有的攔截器(定義了32個攔截器!)
    爲了攔截器引用方便,可以通過定義棧的方式引用攔截器,
    標籤interceptor-stack
    此時如果引用了棧,棧中的攔截器都會被引用!
    defaultStack
    默認的棧,其中定義默認要執行的18個攔截器!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章