Sturts(二)

Struts2 是什么?

是一個擴展的用來建立企業(yè)級JAVA WEB應(yīng)用程序的框架,不但注重程序的開發(fā)程序,更注重部署和后期維護.
Struts2 使用OGNL可以訪問值棧,OGNL對集合和索引屬性的支持非常強大

Struts2核心控制器

在Struts2中,核心控制器是Filter,而不是一個不同的servlet,為了實現(xiàn)AOP概念

Struts框架的組成:

核心控制器FilterDispatcher(Struts2系統(tǒng)給的),業(yè)務(wù)控制器和用戶事項的業(yè)務(wù)邏輯組件(用戶自己提供)
 ######Struts 2框架獲得了*.action請求后,將根據(jù)*.action請求的前面部分決定調(diào)用哪個業(yè)務(wù)邏輯組件,例如,對于login.action請求,Struts 2調(diào)用名為login的Action來處理該請求。
    Struts 2應(yīng)用中的Action都被定義在struts.xml文件中,在該文件中定義Action時,定義了該Action的name屬性和 class屬性,其中name屬性決定了該Action處理哪個用戶請求,而class屬性決定了該Action的實現(xiàn)類。

數(shù)據(jù)流程圖(執(zhí)行流程)
HTTP請求----->核心控制器(web.xml)---Struts.xml---->Action--->IOC方法注值---->Action調(diào)用業(yè)務(wù)邏輯處理業(yè)務(wù)邏輯(3層)--->JSP()返回result)--->HTTP響應(yīng)到客戶端
1、客戶端瀏覽器發(fā)出HTTP請求。
2、根據(jù)web.xml配置,該請求被FilterDispatcher接收。
3、根據(jù)struts.xml配置,找到需要調(diào)用的Action類和方法, 并通過IoC方式,將值注入給Aciton。
4、Action調(diào)用業(yè)務(wù)邏輯組件處理業(yè)務(wù)邏輯,這一步包含表單驗證。
5、Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果result,并跳轉(zhuǎn)到相應(yīng)頁面。
6、返回HTTP響應(yīng)到客戶端瀏覽器。
為什么要用Struts2框架?
Struts2是基于MVC的輕量級的web應(yīng)用框架
Struts配置文件優(yōu)先級
Web.xml > struts.properties >struts.xml
Method的用處?為什么要使用Method?
可以在配置文件中配置Action的時候用method=來指定執(zhí)行哪個方法
也可以在url地址中動態(tài)指定(動態(tài)方法調(diào)用DMI)(推薦)
Struts2 type屬性(轉(zhuǎn)發(fā)和重定向的區(qū)別)
詳請:
轉(zhuǎn)發(fā): 轉(zhuǎn)發(fā)是服務(wù)器行為(瀏覽器上的網(wǎng)址不變)
客戶瀏覽器發(fā)送http請求——>web服務(wù)器接受此請求——>調(diào)用內(nèi)部的一個方法在容器內(nèi)部完成請求處理和轉(zhuǎn)發(fā)動作——>將目標(biāo)資源發(fā)送給客戶;在這里,轉(zhuǎn)發(fā)的路徑必須是同一個web容器下的url,其不能轉(zhuǎn)向到其他的web路徑上去,中間傳遞的是自己的容器內(nèi)的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到服務(wù)器做了轉(zhuǎn)發(fā)的。轉(zhuǎn)發(fā)行為是瀏覽器只做了一次訪問請求。
重定向:客戶端行為(瀏覽器上的網(wǎng)址改變)
客戶瀏覽器發(fā)送http請求——>web服務(wù)器接受后發(fā)送302狀態(tài)碼響應(yīng)及對應(yīng)新的location給客戶瀏覽器——>客戶瀏覽器發(fā)現(xiàn)是302響應(yīng),則自動再發(fā)送一個新的http請求,請求url是新的location地址——>服務(wù)器根據(jù)此請求尋找資源并發(fā)送給客戶。在這里location可以重定向到任意URL,既然是瀏覽器重新發(fā)出了請求,則就沒有什么request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請求的。
正文
重定向其實是兩次request
第一次,客戶端request A,服務(wù)器響應(yīng),并response回來,告訴瀏覽器,你應(yīng)該去B。這個時候IE可以看到地址變了,而且歷史的回退按鈕也亮了。重定向可以訪問自己web應(yīng)用以外的資源。在重定向的過程中,傳輸?shù)男畔粊G失。
請求轉(zhuǎn)發(fā)
是服務(wù)器內(nèi)部把對一個request/response的處理權(quán),移交給另外一個對于客戶端而言,它只知道自己最早請求的那個A,而不知道中間的B,甚至C、D。傳輸?shù)男畔⒉粫G失。
轉(zhuǎn)發(fā)到action用chain
重定向到action用redirectAction
重定向:
  發(fā)送請求 -->服務(wù)器運行-->響應(yīng)請求,返回給瀏覽器一個新的地址與響應(yīng)碼-->瀏覽器根據(jù)響應(yīng)碼,判定該響應(yīng)為重定向,自動發(fā)送一個新的請求給服務(wù)器,請求地址為之前返回的地址-->服務(wù)器運行-->響應(yīng)請求給瀏覽器
轉(zhuǎn)發(fā):
  發(fā)送請求 -->服務(wù)器運行-->進行請求的重新設(shè)置,例如通過request.setAttribute(name,value)-->根據(jù)轉(zhuǎn)發(fā)的地址,獲取該地址的網(wǎng)頁-->響應(yīng)請求給瀏覽器
在Struts2 中獲取請求參數(shù)
1.屬性驅(qū)動
(1)方式一:直接將action做一個model,就可以得到請求參數(shù).
問題1:action封裝請求參數(shù),會不會存在線程安全問題?
不會:因為每一次請求,都是一個新的action。
缺點:需要單獨定義javaBean,將action中屬性copy到j(luò)avaBean中。
優(yōu)點:簡單。
這種方式 ,底層是通過反射來實現(xiàn)的。
(2)方式二:在action中聲明一個model。
private User user;提供get/set方法
在頁面上使用ognl來描述
優(yōu)點:簡單,解決了第一種封裝的問題
缺點:在頁面上使用了ognl表達式,頁面不通用了。
問題:這種方式,數(shù)據(jù)是怎樣封裝的?
是通過struts2中的interceptor進行了數(shù)據(jù)封裝.
2.方式三:模型驅(qū)動(在開發(fā)中應(yīng)用比較多)
步驟:
1.讓action類實現(xiàn)ModelDriven
2.重寫getModel方法
3.在action中實例化一個model對象,讓getModel方法返回這個對象。
優(yōu)點:解決了屬性驅(qū)動存在的問題
缺點:一次只能封裝一個model對象.
Struts2 的Action中取得請求參數(shù)值的幾種方法
方法一:當(dāng)把參數(shù)作為Action的類屬性,且提供屬性的getter/setter方法時,xwork的OGNL會自動把request參數(shù)的值設(shè)置到類屬性中,此時訪問請求參數(shù)只需要訪問類屬性即可。
方法二:可以通過ActionContext對象Map parameterMap=context.getParameters();方法,得到請求參數(shù)Map,然后通過parameterMap來獲取請求參數(shù)。需要注意的是:當(dāng)通過parameterMap的鍵取得參數(shù)值時,取得是一個數(shù)組對象,即同名參數(shù)的值的集合。
方法三:通過ActionContext取得HttpServletRequest對象,然后使用request.getParameter("參數(shù)名")得到參數(shù)值。
Struts2數(shù)據(jù)校驗
1>編程式校驗
2>聲明式校驗(編程常用)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 標(biāo)簽 如果要配置的標(biāo)簽,那么必須要先配置標(biāo)簽,代表的包的概念。 包含的屬性 name包的名稱,要求是唯一的,管理a...
    偷偷得路過閱讀 1,514評論 0 0
  • 幽靜深處竹笛響 白衣天使容不凡 山谷翠竹秋月晚 原來復(fù)空曲中藏
    海語天籟閱讀 283評論 2 11
  • 你渾身流膿,腐爛臃腫 別人躲著你走 叫你瘟神 但你自己知道自己 不是瘟神 是神 你懶得跟別人宣講 忙著找到千尋 找...
    隨性太陽花閱讀 169評論 0 0
  • 我昨晚和一個好朋友葉子吃飯,期間我看她眉頭皺了一下又有點不耐煩的神情,我心里就想,哎喲,到底是這塊羊排不夠騷,還是...
    陳小仙balabala閱讀 2,653評論 0 7
  • 是不是對生活不太滿意,那就一路向西去大理射雕! 最近一直在追新射雕英雄傳,剛好看到一燈大師不惜耗...
    白馬銀槍de元閱讀 360評論 2 1

友情鏈接更多精彩內(nèi)容