Sturts(二)

Struts2 是什么?

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

Struts2核心控制器

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

Struts框架的組成:

核心控制器FilterDispatcher(Struts2系統(tǒng)給的),業(yè)務(wù)控制器和用戶事項(xiàng)的業(yè)務(wù)邏輯組件(用戶自己提供)
 ######Struts 2框架獲得了*.action請(qǐng)求后由驹,將根據(jù)*.action請(qǐng)求的前面部分決定調(diào)用哪個(gè)業(yè)務(wù)邏輯組件聪黎,例如齿税,對(duì)于login.action請(qǐng)求伦忠,Struts 2調(diào)用名為login的Action來(lái)處理該請(qǐng)求荐糜。
    Struts 2應(yīng)用中的Action都被定義在struts.xml文件中,在該文件中定義Action時(shí)闲询,定義了該Action的name屬性和 class屬性怖辆,其中name屬性決定了該Action處理哪個(gè)用戶請(qǐng)求,而class屬性決定了該Action的實(shí)現(xiàn)類裕菠。

數(shù)據(jù)流程圖(執(zhí)行流程)
HTTP請(qǐng)求----->核心控制器(web.xml)---Struts.xml---->Action--->IOC方法注值---->Action調(diào)用業(yè)務(wù)邏輯處理業(yè)務(wù)邏輯(3層)--->JSP()返回result)--->HTTP響應(yīng)到客戶端
1、客戶端瀏覽器發(fā)出HTTP請(qǐng)求闭专。
2奴潘、根據(jù)web.xml配置,該請(qǐng)求被FilterDispatcher接收影钉。
3画髓、根據(jù)struts.xml配置,找到需要調(diào)用的Action類和方法平委, 并通過(guò)IoC方式奈虾,將值注入給Aciton。
4廉赔、Action調(diào)用業(yè)務(wù)邏輯組件處理業(yè)務(wù)邏輯肉微,這一步包含表單驗(yàn)證。
5蜡塌、Action執(zhí)行完畢碉纳,根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果result,并跳轉(zhuǎn)到相應(yīng)頁(yè)面馏艾。
6劳曹、返回HTTP響應(yīng)到客戶端瀏覽器。
為什么要用Struts2框架?
Struts2是基于MVC的輕量級(jí)的web應(yīng)用框架
Struts配置文件優(yōu)先級(jí)
Web.xml > struts.properties >struts.xml
Method的用處?為什么要使用Method?
可以在配置文件中配置Action的時(shí)候用method=來(lái)指定執(zhí)行哪個(gè)方法
也可以在url地址中動(dòng)態(tài)指定(動(dòng)態(tài)方法調(diào)用DMI)(推薦)
Struts2 type屬性(轉(zhuǎn)發(fā)和重定向的區(qū)別)
詳請(qǐng):
轉(zhuǎn)發(fā): 轉(zhuǎn)發(fā)是服務(wù)器行為(瀏覽器上的網(wǎng)址不變)
客戶瀏覽器發(fā)送http請(qǐng)求——>web服務(wù)器接受此請(qǐng)求——>調(diào)用內(nèi)部的一個(gè)方法在容器內(nèi)部完成請(qǐng)求處理和轉(zhuǎn)發(fā)動(dòng)作——>將目標(biāo)資源發(fā)送給客戶琅摩;在這里铁孵,轉(zhuǎn)發(fā)的路徑必須是同一個(gè)web容器下的url,其不能轉(zhuǎn)向到其他的web路徑上去房资,中間傳遞的是自己的容器內(nèi)的request蜕劝。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問(wèn)的路徑,也就是說(shuō)客戶是感覺(jué)不到服務(wù)器做了轉(zhuǎn)發(fā)的志膀。轉(zhuǎn)發(fā)行為是瀏覽器只做了一次訪問(wèn)請(qǐng)求熙宇。
重定向:客戶端行為(瀏覽器上的網(wǎng)址改變)
客戶瀏覽器發(fā)送http請(qǐng)求——>web服務(wù)器接受后發(fā)送302狀態(tài)碼響應(yīng)及對(duì)應(yīng)新的location給客戶瀏覽器——>客戶瀏覽器發(fā)現(xiàn)是302響應(yīng),則自動(dòng)再發(fā)送一個(gè)新的http請(qǐng)求溉浙,請(qǐng)求url是新的location地址——>服務(wù)器根據(jù)此請(qǐng)求尋找資源并發(fā)送給客戶烫止。在這里location可以重定向到任意URL,既然是瀏覽器重新發(fā)出了請(qǐng)求戳稽,則就沒(méi)有什么request傳遞的概念了馆蠕。在客戶瀏覽器路徑欄顯示的是其重定向的路徑期升,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問(wèn)請(qǐng)求的互躬。
正文
重定向其實(shí)是兩次request
第一次播赁,客戶端request A,服務(wù)器響應(yīng),并response回來(lái)吼渡,告訴瀏覽器容为,你應(yīng)該去B。這個(gè)時(shí)候IE可以看到地址變了寺酪,而且歷史的回退按鈕也亮了坎背。重定向可以訪問(wèn)自己web應(yīng)用以外的資源。在重定向的過(guò)程中寄雀,傳輸?shù)男畔?huì)被丟失得滤。
請(qǐng)求轉(zhuǎn)發(fā)
是服務(wù)器內(nèi)部把對(duì)一個(gè)request/response的處理權(quán),移交給另外一個(gè)對(duì)于客戶端而言盒犹,它只知道自己最早請(qǐng)求的那個(gè)A懂更,而不知道中間的B,甚至C急膀、D沮协。傳輸?shù)男畔⒉粫?huì)丟失。
轉(zhuǎn)發(fā)到action用chain
重定向到action用redirectAction
重定向:
  發(fā)送請(qǐng)求 -->服務(wù)器運(yùn)行-->響應(yīng)請(qǐng)求脖阵,返回給瀏覽器一個(gè)新的地址與響應(yīng)碼-->瀏覽器根據(jù)響應(yīng)碼皂股,判定該響應(yīng)為重定向,自動(dòng)發(fā)送一個(gè)新的請(qǐng)求給服務(wù)器命黔,請(qǐng)求地址為之前返回的地址-->服務(wù)器運(yùn)行-->響應(yīng)請(qǐng)求給瀏覽器
轉(zhuǎn)發(fā):
  發(fā)送請(qǐng)求 -->服務(wù)器運(yùn)行-->進(jìn)行請(qǐng)求的重新設(shè)置呜呐,例如通過(guò)request.setAttribute(name,value)-->根據(jù)轉(zhuǎn)發(fā)的地址,獲取該地址的網(wǎng)頁(yè)-->響應(yīng)請(qǐng)求給瀏覽器
在Struts2 中獲取請(qǐng)求參數(shù)
1.屬性驅(qū)動(dòng)
(1)方式一:直接將action做一個(gè)model,就可以得到請(qǐng)求參數(shù).
問(wèn)題1:action封裝請(qǐng)求參數(shù)悍募,會(huì)不會(huì)存在線程安全問(wèn)題?
不會(huì):因?yàn)槊恳淮握?qǐng)求蘑辑,都是一個(gè)新的action。
缺點(diǎn):需要單獨(dú)定義javaBean,將action中屬性copy到j(luò)avaBean中坠宴。
優(yōu)點(diǎn):簡(jiǎn)單洋魂。
這種方式 ,底層是通過(guò)反射來(lái)實(shí)現(xiàn)的喜鼓。
(2)方式二:在action中聲明一個(gè)model副砍。
private User user;提供get/set方法
在頁(yè)面上使用ognl來(lái)描述
優(yōu)點(diǎn):簡(jiǎn)單,解決了第一種封裝的問(wèn)題
缺點(diǎn):在頁(yè)面上使用了ognl表達(dá)式庄岖,頁(yè)面不通用了豁翎。
問(wèn)題:這種方式,數(shù)據(jù)是怎樣封裝的?
是通過(guò)struts2中的interceptor進(jìn)行了數(shù)據(jù)封裝.
2.方式三:模型驅(qū)動(dòng)(在開發(fā)中應(yīng)用比較多)
步驟:
1.讓action類實(shí)現(xiàn)ModelDriven
2.重寫getModel方法
3.在action中實(shí)例化一個(gè)model對(duì)象隅忿,讓getModel方法返回這個(gè)對(duì)象心剥。
優(yōu)點(diǎn):解決了屬性驅(qū)動(dòng)存在的問(wèn)題
缺點(diǎn):一次只能封裝一個(gè)model對(duì)象.
Struts2 的Action中取得請(qǐng)求參數(shù)值的幾種方法
方法一:當(dāng)把參數(shù)作為Action的類屬性邦尊,且提供屬性的getter/setter方法時(shí),xwork的OGNL會(huì)自動(dòng)把request參數(shù)的值設(shè)置到類屬性中优烧,此時(shí)訪問(wèn)請(qǐng)求參數(shù)只需要訪問(wèn)類屬性即可蝉揍。
方法二:可以通過(guò)ActionContext對(duì)象Map parameterMap=context.getParameters();方法,得到請(qǐng)求參數(shù)Map畦娄,然后通過(guò)parameterMap來(lái)獲取請(qǐng)求參數(shù)又沾。需要注意的是:當(dāng)通過(guò)parameterMap的鍵取得參數(shù)值時(shí),取得是一個(gè)數(shù)組對(duì)象熙卡,即同名參數(shù)的值的集合捍掺。
方法三:通過(guò)ActionContext取得HttpServletRequest對(duì)象,然后使用request.getParameter("參數(shù)名")得到參數(shù)值再膳。
Struts2數(shù)據(jù)校驗(yàn)
1>編程式校驗(yàn)
2>聲明式校驗(yàn)(編程常用)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曲横,隨后出現(xiàn)的幾起案子喂柒,更是在濱河造成了極大的恐慌,老刑警劉巖禾嫉,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灾杰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡熙参,警方通過(guò)查閱死者的電腦和手機(jī)艳吠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)孽椰,“玉大人昭娩,你說(shuō)我怎么就攤上這事∈蜇遥” “怎么了栏渺?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锐涯。 經(jīng)常有香客問(wèn)我磕诊,道長(zhǎng),這世上最難降的妖魔是什么纹腌? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任霎终,我火速辦了婚禮,結(jié)果婚禮上升薯,老公的妹妹穿的比我還像新娘莱褒。我一直安慰自己,他們只是感情好覆劈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布保礼。 她就那樣靜靜地躺著沛励,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炮障。 梳的紋絲不亂的頭發(fā)上目派,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音胁赢,去河邊找鬼企蹭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛智末,可吹牛的內(nèi)容都是我干的谅摄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼系馆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼送漠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起由蘑,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤闽寡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后尼酿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爷狈,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年裳擎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涎永。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹿响,死狀恐怖羡微,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抢野,我是刑警寧澤拷淘,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站指孤,受9級(jí)特大地震影響启涯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恃轩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一结洼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叉跛,春花似錦松忍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宏所。三九已至,卻和暖如春摊溶,著一層夾襖步出監(jiān)牢的瞬間爬骤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工莫换, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霞玄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓拉岁,卻偏偏與公主長(zhǎng)得像坷剧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喊暖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

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