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
- struts中的action類取代之前的servlet
action類,也叫做動作類; 一般繼承ActionSupport類(即處理請求的類 ) - 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 內容:
- bean節點指定struts在運行的時候創建的對象類型
- 指定struts-default包 【用戶寫的package(struts.xml)一樣要繼承此包 】,
包中定義了:
2.1 跳轉的結果類型
dispatcher 轉發,不指定默認爲轉發
redirect 重定向
redirectAction 重定向到action資源
stream (文件下載的時候用)
2.2 定義了所有的攔截器(定義了32個攔截器!)
爲了攔截器引用方便,可以通過定義棧的方式引用攔截器,
標籤interceptor-stack
此時如果引用了棧,棧中的攔截器都會被引用!
defaultStack
默認的棧,其中定義默認要執行的18個攔截器!