1. 程式人生 > 實用技巧 >【Struts2】Struts2技術基礎

【Struts2】Struts2技術基礎

Struts2 框架

Struts2 概念: mvc設計思想中,控制器的解決方案。(替代並簡化 servlet的控制器開發)
優點: ①程式碼解耦和(跳轉路徑不會寫死在程式碼中
②自動接受請求引數,自動轉化型別,自動封裝成實體
③跳轉路徑的程式碼,消除
④一個Struts2控制器可以書寫多個方法,便於管理
⑤Struts2程式碼書寫角度,脫離Servlet的api.便於單元測 試(普通java類)

1).第一個Struts2程式(Struts2的環境搭建、配置及其執行)

(1)搭建Struts環境
匯入jar包 
(2)匯入struts.xml,放入src的根目錄下
(3)配置struts2的前端控制器(核心控制器),web.xml
	<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>
 
(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>
	<package name="struts" extends="struts-default">
		<action class="全類名 " name="訪問action的名字" method="類的方法名">
			<result name="ok">/index.jsp</result>
		</action>
	</package>
</struts>
啟動TomCat訪問時,路徑+action的名字

2).Struts2內建工具類(ServletActionContext)、接受請求引數、及其action的生命週期

(1)Struts2內建工具類
工具類: ServletActionContext
作用:獲得request  response  servletContext 物件。
(2)Struts2接受請求引數
### struts接受請求引數核心特點
①使用Action的屬性接受
②自動資料型別轉化(Integer Double Long String Date)
③自動實體物件的封裝
### 基本資料型別和包裝型別資料接收,以及String、Date
Integer Double Long String  Date(預設支援格式: yyyy-MM-dd yyyy年MM月dd日)
①在Action中宣告屬性
②屬性名必須要和請求引數名保持一致
③提供標準set和get方法
### 陣列型別(List集合型別)引數接受
①在Action中宣告陣列型別的屬性。
②保證屬性名和請求引數名一直
③提供set、get方法。
### 封裝實體物件
①在action宣告實體型別的屬性
②保證請求引數的名字格式:`action的屬性名.實體屬性名`
③提供set和get方法
(3)Struts2的Action的生命週期
Servlet的生命週期:
①瀏覽器第一次訪問建立
②tomcat關閉銷燬
③一個Servlet類只建立一個servlet物件。
Struts2實現的控制器生命週期:
①建立:瀏覽器每次訪問,都會新建action物件。
②個數:N個。
③生命週期一次請求過程。
優點:
action使用屬性接受資料,是執行緒安全。
為什麼要講aciton設計多例?
①struts2使用action的屬性接受資料。
②如果action只建立一個,多執行緒訪問臨街資源,執行緒不安全。
底層設計:
瀏覽器請求------sturts2的action---反射建立物件。(Action action = new XXxxAction)
並request.setAttribute("名字",action);

3).Struts2實戰action的開發規範、跳轉

(1)實戰Action開發規範
控制器編寫:將業務邏輯相關的控制器方法,放在同一個Action類中。
package:
作用: 在struts.xml管理action標籤。
將業務邏輯相關的控制方法的配置action標籤,放在同一個package標籤下。
namespace:
訪問action: `/專案名/namespace/action的name`
標籤:
<package name="user" extends="struts-default" namespace="/user">
     	<action name="fAction"></action>
</package>
訪問: /專案名/user/fAction
開發規範:將業務邏輯相關的action的訪問路徑,放在同一個namespace下。
(2)跳轉
預設: action--->jsp(請求轉發)
①Action--->JSP
	請求轉發 (展示所有控制器跳轉到展示所有jsp): 預設:
	請求重定向 (註冊成功後跳轉到登入頁面):
		<action name="" class="" method="">
			<result name="方法返回值" type="跳轉方式">跳轉後的jsp的URL-pattern</result>
        </action>
		type可選值:  dispatcher(請求轉發) 、redirect(請求重定向)
②Action---->Action(同包跳轉)
		<action name="" class="" method="">
			<result name="方法返回值" type="跳轉方式">跳轉後的action的名字</result>
        </action>
        type可選值:	chain(請求轉發)、	redirectAction(請求重定向)
③Action跨namespace跳轉到Action
<action name="" class="" method="">
	<result name="方法返回值" type="跳轉方式">
		<param name="namespace">目標跳轉的action所在的namespace</param>
		<param name="actionName">目標action的name</param>
    </result>
</action>
type:  chain(請求轉發)、redirectAction(請求重定向)
4).Request的作用域、struts2的常量配置、以及配置檔案簡化
(1)request作用域
①通過ServletActionContext獲得request物件。
②Action的屬性自動放入request作用域中。
	 
(2)struts2的常量配置
預設配置檔案: struts2-core-2.3.16.3.jar  (org.apache.struts/default.properties)
①設定請求引數的編碼:
   <constant name="struts.i18n.encoding" value="UTF-8"></constant>
②設定action預設請求字尾
   struts.action.extension=action
   <constant name="struts.action.extension" value="do"></constant>
③檔案上傳大小設定
   struts.multipart.maxSize=2097152: 預設單個檔案上傳大小限制,單位位元組: 2M
   設定檔案上傳大小為20M
   <constant name="struts.multipart.maxSize" value="20000000"></constant>
(3)action配置檔案簡化
①配置通用的action訪問路徑
 
②特點:
好處: 簡化action標籤,開發程式碼少。
缺點: 可讀性差。