![第16章struts2高級(jí)應(yīng)用_第1頁](http://file4.renrendoc.com/view/47625cbae9bdf53454553e685eb44038/47625cbae9bdf53454553e685eb440381.gif)
![第16章struts2高級(jí)應(yīng)用_第2頁](http://file4.renrendoc.com/view/47625cbae9bdf53454553e685eb44038/47625cbae9bdf53454553e685eb440382.gif)
![第16章struts2高級(jí)應(yīng)用_第3頁](http://file4.renrendoc.com/view/47625cbae9bdf53454553e685eb44038/47625cbae9bdf53454553e685eb440383.gif)
![第16章struts2高級(jí)應(yīng)用_第4頁](http://file4.renrendoc.com/view/47625cbae9bdf53454553e685eb44038/47625cbae9bdf53454553e685eb440384.gif)
![第16章struts2高級(jí)應(yīng)用_第5頁](http://file4.renrendoc.com/view/47625cbae9bdf53454553e685eb44038/47625cbae9bdf53454553e685eb440385.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第16章Struts2高級(jí)應(yīng)用
本章將介紹Struts2框架內(nèi)建的類型轉(zhuǎn)換器,如基本數(shù)據(jù)類型轉(zhuǎn)換器、數(shù)組類型轉(zhuǎn)換器及集合轉(zhuǎn)換器。還將詳細(xì)介紹服務(wù)器端校驗(yàn)并介紹使用校驗(yàn)框架來完成輸入校驗(yàn)。通過本章的學(xué)習(xí),讀者應(yīng)該能夠完成如下幾個(gè)目標(biāo)。熟練使用Struts2內(nèi)建的類型轉(zhuǎn)換器理解服務(wù)器端校驗(yàn)的重要性熟練使用addFieldError來添加校驗(yàn)錯(cuò)誤信息熟練使用Struts2校驗(yàn)框架完成輸入校驗(yàn)16.1Struts2內(nèi)建的類型轉(zhuǎn)換器 Struts2為常用的數(shù)據(jù)類型提供了內(nèi)建的類型轉(zhuǎn)換器,所以根本不用自定義轉(zhuǎn)換器。對于內(nèi)建的轉(zhuǎn)換器,Struts在遇到這些類型時(shí),會(huì)自動(dòng)去調(diào)用相應(yīng)的轉(zhuǎn)換器進(jìn)行類型轉(zhuǎn)換。下面來看Struts2提供了哪些內(nèi)建的類型轉(zhuǎn)換器,以及這些內(nèi)建類型轉(zhuǎn)換器的使用。16.1.1內(nèi)建轉(zhuǎn)換器介紹Struts2為常用的數(shù)據(jù)類型提供了內(nèi)建的類型轉(zhuǎn)換器,大部分情況下可以不用自定義轉(zhuǎn)換器。對于內(nèi)建的轉(zhuǎn)換器,Struts在遇到這些類型時(shí),會(huì)自動(dòng)去調(diào)用相應(yīng)的轉(zhuǎn)換器。下面列舉了全部的內(nèi)建轉(zhuǎn)換器:基本數(shù)據(jù)類型轉(zhuǎn)換器基本數(shù)據(jù)類型的封裝類轉(zhuǎn)換器數(shù)組類型轉(zhuǎn)換器集合類型轉(zhuǎn)換器16.1.2基本數(shù)據(jù)類型轉(zhuǎn)換器Struts2的內(nèi)建轉(zhuǎn)換器中包含一個(gè)基本數(shù)據(jù)類型轉(zhuǎn)換器,通過它能自動(dòng)的完成基本數(shù)據(jù)類型到字符串的轉(zhuǎn)換。16.1.3基本數(shù)據(jù)類型的封裝類轉(zhuǎn)換器Struts2不但提供了基本數(shù)據(jù)類型轉(zhuǎn)換器,同時(shí)也提供了基本數(shù)據(jù)類型封裝類的轉(zhuǎn)換器。其用法和基本數(shù)據(jù)類型基本一樣,只需修改業(yè)務(wù)控制器中的屬性為對應(yīng)的封裝類就可以了。16.1.4數(shù)組類型轉(zhuǎn)換器Struts2還提供了一個(gè)數(shù)組類型的轉(zhuǎn)換器。這個(gè)轉(zhuǎn)換器非常有用,比如多個(gè)表單元素的name屬性相同,那么提交的參數(shù)就不再是字符串而是一個(gè)字符串?dāng)?shù)組。通過Struts2提供的數(shù)組類型的轉(zhuǎn)換器就能很方便的將多個(gè)相同name屬性的表單元素的值封裝到Action中的一個(gè)數(shù)組中。16.1.5集合類型轉(zhuǎn)換器
上面介紹的是通過字符串?dāng)?shù)組來接受參數(shù)值,同樣也可以通過集合類型來接受參數(shù)值。Struts2提供的集合類型轉(zhuǎn)換器,會(huì)將參數(shù)值自動(dòng)賦值到集合類型屬性中。16.2服務(wù)器端校驗(yàn)
如果一個(gè)Web應(yīng)用僅有客戶端驗(yàn)證那是不夠的。攻擊者這可以繞過客戶端校驗(yàn)直接進(jìn)行非法輸入,這樣可能會(huì)引起系統(tǒng)的異常,所以必須加上服務(wù)器端的驗(yàn)證。下面來看如何添加服務(wù)器端校驗(yàn)。16.2.1服務(wù)器端校驗(yàn)的重要性
如果為注冊頁面添加了客戶端校驗(yàn),那么用戶輸入的信息不合法則無法提交。這是這里要注意的話,使用JavaScript增加客戶端校驗(yàn)僅僅使得非法的數(shù)據(jù)無法提交,但是一些侵入者完成可以采用其他的方式來進(jìn)行提交。下面來看如何繞過這些JavaScript校驗(yàn)代碼?首先可以直接把這個(gè)注冊頁面下載下來,然后通過刪除那些JavaScript代碼,再修改表單的提交地址。這樣的話,就算是輸入不合法的信息,客戶端校驗(yàn)也起不了作用了,因?yàn)檫BJavaScript代碼都被刪除掉了。通過一種如此簡單的方法就可以繞過這些JavaScript校驗(yàn)代碼。那些侵入者很可能使用更加高級(jí)的手段來繞過這些JavaScript代碼,從而直接提交非法的數(shù)據(jù)。要避免這種情況就必須添加服務(wù)器端校驗(yàn),服務(wù)端校驗(yàn)是整個(gè)Web應(yīng)用中最重要的一道防線。用戶使無法直接接觸到服務(wù)器端代碼的,這樣的話就算是客戶端校驗(yàn)被人繞過,仍然能夠通過服務(wù)器端校驗(yàn)來阻止用戶的非法輸入。服務(wù)器端校驗(yàn)對于系統(tǒng)的安全性、完整性、健壯性起到了至關(guān)重要的作用。16.2.1服務(wù)器端校驗(yàn)的重要性
那是不是客戶端校驗(yàn)根本就沒有什么意義了呢?其實(shí)不是,因?yàn)椴⒉皇敲總€(gè)用戶都有這樣惡意侵入的想法。大部分的用戶都是采用的正常的輸入,使用客戶端校驗(yàn)?zāi)軌蜻^濾掉用戶的誤操作。如果沒有客戶端校驗(yàn),那么就算用戶只是一個(gè)錯(cuò)誤的操作,服務(wù)器端就要對其輸入的信息進(jìn)行處理并返回錯(cuò)誤提示,這樣會(huì)大大增加服務(wù)器端的負(fù)載??蛻舳诵r?yàn)就像是一把鎖,能夠防君子但是不能防小人。同樣客戶端校驗(yàn)和服務(wù)器端校驗(yàn)是緊密結(jié)合的,兩者缺一不可。16.2.2完成服務(wù)器端輸入校驗(yàn)
下面來完成服務(wù)器端輸入校驗(yàn)。其中包含兩個(gè)文件,一個(gè)是用戶注冊頁register.jsp,一個(gè)是業(yè)務(wù)控制器RegisterAction
。16.2.3使頁面保留提交信息
如果希望表單中能夠保留提交的信息,可以在表單的每個(gè)元素中添加value屬性,并通過EL表達(dá)式來獲得相應(yīng)參數(shù)值。16.2.4使用addFieldError來添加錯(cuò)誤信息
在前面介紹了使用actionError來保存輸入校驗(yàn)錯(cuò)誤提示信息。actionError其實(shí)就是一個(gè)ArrayList,將錯(cuò)誤信息保存在actionError中,其實(shí)就是保存在一個(gè)ArrayList中。前面曾講過類型轉(zhuǎn)換的錯(cuò)誤信息是保存在fieldError中,同樣輸入校驗(yàn)的錯(cuò)誤信息也可以通過addFieldError方法來保存到fieldError中。fieldError和actionError不同的是,fieldError是采用Map結(jié)構(gòu)來存儲(chǔ)的,所以都是以鍵值對來保存信息。那到底是使用fieldError來保存錯(cuò)誤提示信息還是使用actionError好呢?這個(gè)就依據(jù)項(xiàng)目具體要求而定了,如果只是希望在頁面中單純的顯示錯(cuò)誤提示信息,可以使用actionError來保存錯(cuò)誤提示信息;如果希望在相應(yīng)的文本框中顯示錯(cuò)誤提示信息,則需要使用fieldError來保存錯(cuò)誤提示信息。16.2.5輸入校驗(yàn)與類型轉(zhuǎn)換關(guān)系
用戶提交參數(shù)后,首先將會(huì)調(diào)用類型轉(zhuǎn)換器來執(zhí)行類型轉(zhuǎn)換。如果類型轉(zhuǎn)換失敗,則會(huì)將錯(cuò)誤信息保存在fieldError中。然后不管類型轉(zhuǎn)換失敗還是成功,都會(huì)進(jìn)行輸入校驗(yàn),并將校驗(yàn)錯(cuò)誤信息保存到fieldError或者actionError中。最后系統(tǒng)判斷fieldError或actionError中是否存在錯(cuò)誤信息,如果存在錯(cuò)誤信息,頁面將跳轉(zhuǎn)到input邏輯視圖指定的視圖資源,并在視圖資源中將錯(cuò)誤信息顯示出來。類型轉(zhuǎn)換和輸入校驗(yàn)的執(zhí)行順序是非常重要的。為什么要先進(jìn)行類型轉(zhuǎn)換呢。因?yàn)椴荒鼙WC用戶輸入的信息符合要求,比如年齡屬性肯定會(huì)要求接收一個(gè)能夠轉(zhuǎn)換為int類型的字符串。用戶的輸入是自由的,很可能輸入一些無法轉(zhuǎn)換的字符串,所以必須先對用戶輸入的信息進(jìn)行類型轉(zhuǎn)換,然后再將類型轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行輸入校驗(yàn)。如果在年齡文本框中輸入一個(gè)“aa”字符串,類型轉(zhuǎn)換肯定會(huì)失敗,在fieldError中將保存該類型轉(zhuǎn)換錯(cuò)誤信息。age屬性的初始值為0,那么在輸入校驗(yàn)中也將提示該錯(cuò)誤信息。16.3使用校驗(yàn)框架完成輸入校驗(yàn)
前面介紹了Struts2中內(nèi)置的校驗(yàn)器,下面將通過這些校驗(yàn)器來改寫注冊案例。同時(shí)將結(jié)合國際化處理來實(shí)現(xiàn)國際化信息提示,并通過配置來添加客戶端校驗(yàn)。16.3.1完成輸入校驗(yàn)Struts2提供了許多的內(nèi)置的校驗(yàn)器,通過這些校驗(yàn)器可以非常方便的添加校驗(yàn)規(guī)則。不需要再使用手動(dòng)添加校驗(yàn)代碼的方式,而是使用編寫校驗(yàn)規(guī)則文件的方式來進(jìn)行輸入校驗(yàn)。下面來看有哪些輸入校驗(yàn)規(guī)則。(1)用戶名、密碼、確認(rèn)密碼必須輸入。(2)用戶名只能是數(shù)字或者字母,長度為6到20之間。(3)密碼,確認(rèn)密碼必須是數(shù)字或者字母,長度為6到20之間。(4)密碼和確認(rèn)密碼必須相同。(5)年齡必須為整數(shù)而且必須是有效的年齡值。(6)出生日期必須為正確的日期格式如1988-01-03,而且只能是1900-1-1年到是2010-1-1年之間。(7)郵箱地址必須為合法的郵箱地址。16.3.2增加客戶端校驗(yàn)Struts2還提供了一個(gè)非常好的功能,就是能通過校驗(yàn)規(guī)則文件自動(dòng)添加客戶端輸入校驗(yàn)。先來看下如何來添加客戶端校驗(yàn)。非常簡單,只用<s:form>標(biāo)簽中添加validate=“true”屬性即可。16.3.3國際化提示信息
前面介紹的輸出校驗(yàn)錯(cuò)誤信息,是通過直接在校驗(yàn)規(guī)則文件中添加錯(cuò)誤提示信息實(shí)現(xiàn)的。其實(shí)可以通過國際化資源文件來定義錯(cuò)誤信息,而通過校驗(yàn)規(guī)則文件中<message>標(biāo)簽中的key來指定所使用的校驗(yàn)錯(cuò)誤信息。16.3.4客戶端校驗(yàn)與國際化問題
前面之所以開始要去掉客戶端校驗(yàn)功能。是因?yàn)橥瑫r(shí)使用客戶端校驗(yàn)功能和國際化功能會(huì)出現(xiàn)異常??梢酝ㄟ^另一種方式來讀取國際化信息。在校驗(yàn)規(guī)則文件中使用${getTest(“key”)}來讀取國際化文件中的信息。
16.3.5校驗(yàn)短路
短路,也就是說一個(gè)校驗(yàn)器校驗(yàn)失敗了另一個(gè)校驗(yàn)器不會(huì)再進(jìn)行校驗(yàn)。要想實(shí)現(xiàn)短路這種效果,只需在field-validtor元素(字段校驗(yàn)器配置風(fēng)格)或者是valitor元素(非字段校驗(yàn)器風(fēng)格)中增加一個(gè)short-circuit屬性,并設(shè)置其屬性值為true進(jìn)行了。16.4綜合練習(xí)
編寫校驗(yàn)規(guī)則文件,用戶名、密碼必須
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代物流信息系統(tǒng)建設(shè)中的標(biāo)準(zhǔn)化問題
- 掛繩高空作業(yè)施工方案
- 拆除臨時(shí)用電施工方案
- 生態(tài)文明教育在校園的實(shí)踐與推廣
- 現(xiàn)代企業(yè)綜合管理能力提升及領(lǐng)導(dǎo)力培訓(xùn)方案研究報(bào)告
- 國慶節(jié)營銷活動(dòng)方案模板
- 2023三年級(jí)語文上冊 第一單元 習(xí)作:猜猜他是誰說課稿 新人教版
- Unit 2 AnimaIs Lesson 1 Enjoy the story(說課稿)-2024-2025學(xué)年北師大版(三起)英語五年級(jí)上冊
- 2024秋八年級(jí)物理上冊 第1章 機(jī)械運(yùn)動(dòng) 第2節(jié) 運(yùn)動(dòng)的描述說課稿2(新版)新人教版
- 2025仿石漆施工合同
- 數(shù)學(xué)-河南省三門峽市2024-2025學(xué)年高二上學(xué)期1月期末調(diào)研考試試題和答案
- 二零二五版電力設(shè)施維修保養(yǎng)合同協(xié)議3篇
- 最經(jīng)典凈水廠施工組織設(shè)計(jì)
- VDA6.3過程審核報(bào)告
- 《心臟血管的解剖》課件
- 2024-2030年中國并購基金行業(yè)發(fā)展前景預(yù)測及投資策略研究報(bào)告
- 小耳畸形課件
- 新人教版初中初三中考數(shù)學(xué)總復(fù)習(xí)課件
- 機(jī)械制造有限公司組織架構(gòu)圖模板
- 精美唯美淡雅個(gè)人求職簡歷模板 (7)
- 環(huán)保鐵1215物質(zhì)安全資料表MSDS
評論
0/150
提交評論