1. 程式人生 > >struts學習總結

struts學習總結

方法返回值 type ima 不能 mes 需要 spa aware odi

-- struts2 是在struts1和webwork基礎上發展的全新框架。

-- struts2解決的問題:
原始的servlet中,每需要操作一個crud的操作就要創建一個servlet,雖然後面
使用了baseServlet,但是還是不夠好。struts2就是用來解決這個問題的。
解決問題的原理:使用過濾器,根據不同的請求來執行同一個類(Action --> 由form
表單中的action屬性得來)中的不同方法

--- 過濾器服務器啟動就創建,servlet默認第一次訪問創建
struts2訪問流程:瀏覽器地址欄輸入地址->進入struts過濾器

-- struts2過濾器(StrutsPrepareAndExecuteFilter)所做的工作:
1.獲取請求的鏈接、得到路徑中的最後一個‘/’後的值,例如:demo(.action)。
2.得到src下面的struts.xml,使用dom4j解析獲取得到xml文件中的內容,拿著demo值得
到xml文件中找action標簽,匹配name值是否一樣。
3.匹配action標簽後,找到該action標簽中的class,使用反射創建class對於的類,並
執行裏面的execute方法。
4.得到execute執行後的返回值,再到struts.xml中去尋找與result標簽,匹配到result
標簽中的name屬性後,跳轉到result標簽中規定的頁面中去。

-- 過濾器在服務器啟動的時候通過執行init()方法來創建
init()方法中主要加載配置文件,包括我們創建的和struts2自己的配置文件 -->重
點struts.xml和web.xml

-- struts2核心配置文件
標簽
-- package:類似於代碼包,區別不同的action
-- name屬性:屬性值和功能本身是沒有關系的。配置文件中可以有多
個,但是name值不能相同。
-- extends屬性:extends="struts-default",固定寫法。讓類具有、
Action功能
-- namespace屬性:和action標簽構成訪問路徑。
-- action :配置action的訪問路徑
-- name:和package中的namespace構成訪問的路徑,可以有多個但是
不可name值不可重復
-- class:action全路徑
-- method:請求的方法,指定action要執行的方法
-- result:根據action的方法的返回值,跳轉到不同頁面
-- name屬性:和方法返回值一樣
-- type屬性:配置跳轉頁面的方式(轉發或者重定向),默認是轉發

-- 修改struts2默認常量值
在struts.xml中配置
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

處理了post提交的中文亂碼

-- struts2分模塊開發:就是創建不同的action的配置文件,最後在struts中使用
include標簽包含進去。

-- struts2 中Action的編寫方式
1.一個普通類 寫execute()方法就行
2.實現Action接口
3.繼承ActionSupport類 --推薦

-- struts2訪問方法的方式
1.在配置文件中的action標簽中配置method屬性 --缺陷:每個方法都要配置一個
action
2.通配符 *:--- *匹配任意值 {index} index為int值,例如:{1},表示取第幾個*的

技術分享圖片

技術分享圖片

例如訪問m1方法,地址欄輸入:http://localhost:8080/struts2/hello_m1,即可。

3.動態配置 --不使用


-- struts2 全局結果配置
適用於 返回的結果和跳轉的頁面一致的時候使用
<global-results>
<result name="success">success.jsp</result>
</global-results>

-- struts2 局部結果配置
就是在action標簽中的result標簽,局部結果配置優先於全局結果配置

-- result 的type屬性
type屬性:配置如何到路徑裏面(轉發還是重定向)
-- 默認值:轉發。值是:dispatcher
-- 重定向 值是:redirect
---------上面兩種針對的是頁面
-- chain:轉發到另一個Action ---- 一般不用
-- redirectAction:重定向到另一個Action

-- action獲取表單提交數據的三種方式
(1)使用ActionContext類
(2)使用ServletAcitonContext類
(3)使用接口註入,實現一個ServletRequestAware接口 -- 一般不用

-- struts2封裝獲取數據
-- 屬性封裝:Action中定義與數據同名的成員變量並寫出與其對應的set方法
,他只能把數據保存到屬性裏面,但是無法直接封裝到實體類中。 -- 不常用

-- 模型驅動封裝:直接把數據封裝到實體類中。
實現過程:
1.實現ModelDriven;2.實現getModel方法;3.在Action成員位置中創建實
體對象,並在getModel中返回

技術分享圖片


-- 表達式封裝(也算作屬性封裝)。
實現過程:
1.在Action裏面聲明實體類
2.生成實體的get和set方法
3.form表單中的input的name屬性寫法為:實體對象變量名.實體屬性,例
user.username ,user為User類的變量名,username為User類中的一個屬性

技術分享圖片

技術分享圖片

-- 使用模型驅動和屬性封裝註意的問題:
不同同時使用模型驅動和屬性封裝來獲取同一個表單數據,若同時存放,只會
執行模型驅動
--使用模型驅動只能把一個表單數據封裝到一個實體類中,但是表達式封裝可
以將表單數據封裝到多個實體類中

struts學習總結