軟件開發(fā)架構(gòu)平臺技術(shù):Struts 主要功能_第1頁
軟件開發(fā)架構(gòu)平臺技術(shù):Struts 主要功能_第2頁
軟件開發(fā)架構(gòu)平臺技術(shù):Struts 主要功能_第3頁
軟件開發(fā)架構(gòu)平臺技術(shù):Struts 主要功能_第4頁
軟件開發(fā)架構(gòu)平臺技術(shù):Struts 主要功能_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

軟件開發(fā)架構(gòu)平臺技術(shù)CH10StrutsIII主要功能回顧OGNL和標(biāo)簽庫攔截器目錄國際化類型轉(zhuǎn)換輸入校驗(yàn)國際化國際化國際化(Internationalization)是使程序在不做任何修改的情況下,就可以在不同的國家或地區(qū)和不同的語言環(huán)境下,按照當(dāng)?shù)氐恼Z言和格式習(xí)慣顯示字符,又被稱為I18N。一個國際化的程序,當(dāng)運(yùn)行在本地機(jī)器上時,需要根據(jù)本地機(jī)器的語言和地區(qū)設(shè)置顯示相應(yīng)的字符,這個過程就叫做本地化(Localization),簡稱L10N。Java通過java.util.Locale類和java.util.ResourceBundle抽象類來實(shí)現(xiàn)國際化。Locale類提供本地信息(語言環(huán)境),ResourceBundle類稱為資源包,包含了特定于語言環(huán)境的資源對象。國際化JavaSE中國際化的實(shí)現(xiàn)Locale類常用的構(gòu)造方法如publicLocale(Stringlanguage)publicLocale(Stringlanguage,Stringcountry)Localelocale1=newLocale("zh","CN");Localelocale2=newLocale("en","US");Localelocale3=newLocale("en","GB");國際化JavaSE中國際化的實(shí)現(xiàn)實(shí)際應(yīng)用中一般將不同語言的資源包以屬性文件的形式出現(xiàn),如:屬性文件還可以參數(shù)化Struts2的國際化Struts2仍然采用屬性文件來保存資源包。Struts2提供四種方式訪問資源文件中的本地化信息:在action中訪問——getText()方法在JSP中通過Struts2標(biāo)簽訪問——<s:text>標(biāo)簽在表單標(biāo)簽的屬性中訪問——label或key屬性在資源文件中訪問——OGNL表達(dá)式Struts2中國際化的使用Struts2按照下列順序來獲取用戶的locale對象判斷struts.locale屬性是否有值;如果沒有,從請求頭中獲取語言信息,并初始化locale;通過名為I18nInterceptor的攔截器獲取名為request_locale請求參數(shù)的值,并存儲到session中。所以可以通過struts.locale來設(shè)置Web應(yīng)用的默認(rèn)locale程序運(yùn)行過程中,要修改locale,可通過提交名為request_locale的請求參數(shù)。國際化使用范例效果展示類型轉(zhuǎn)換的必要性基于HTTP協(xié)議的Web應(yīng)用中,客戶端(瀏覽器)和服務(wù)器之間傳輸?shù)亩际亲址问降臄?shù)據(jù),但在服務(wù)端的Java程序中,數(shù)據(jù)是有各種類型的,如int、double、Date等。因此,在接收到客戶端傳來的字符串?dāng)?shù)據(jù)后,就需要將這些字符串轉(zhuǎn)換為正確的類型,這就是類型轉(zhuǎn)換。一個成熟的Web表示層框架都會提供一定的類型轉(zhuǎn)換能力,可以自動對客戶端請求的字符串轉(zhuǎn)換為服務(wù)端需要的類型,這一過程對開發(fā)者來說是透明。Struts2提供了優(yōu)秀的類型轉(zhuǎn)換能力。傳統(tǒng)的類型轉(zhuǎn)換處理Stringname=request.getParameter("name");StringstrAge=request.getParameter("age");StringstrBirthday=request.getParameter("birthday");intage=Integer.parseInt(strAge);DateFormatdf=DateFormat.getDateInstance(DateFormat.SHORT);Datebirthday=null;try{birthday=df.parse(strBirthday);}catch(ParseExceptione){e.printStackTrace();}Studentstudent=newStudent(name,age,birthday);Struts2的類型轉(zhuǎn)換使用OGNL表達(dá)式命名參數(shù)針對前例中提到的Student對象,在表單元素命名時,只需要把表單元素命名為合法的OGNL表達(dá)式,如,student.age,student.birthday。在服務(wù)端的Action中,提供student對象,則可以使用Struts

2的自動類型轉(zhuǎn)換能力了。Struts2的類型轉(zhuǎn)換Struts2內(nèi)置的類型轉(zhuǎn)換器String:將int、long、double、boolean、String類型的數(shù)組或java.util.Date類型轉(zhuǎn)換為字符串。Boolean/boolean:在字符串和布爾值之間進(jìn)行轉(zhuǎn)換。Character/char:在字符串和字符之間進(jìn)行轉(zhuǎn)換。Integer/int、Float/float、Long/long、Double/double:在字符串和數(shù)值間進(jìn)行轉(zhuǎn)換。date:在字符串和數(shù)值型的數(shù)據(jù)之間進(jìn)行轉(zhuǎn)換。采用SHORT格式來處理輸入和輸出,使用當(dāng)前請求關(guān)聯(lián)的Locale來確定日期格式。array:由于數(shù)組元素本身就有類型,Struts2使用元素類型對應(yīng)的類型轉(zhuǎn)換器,將字符串轉(zhuǎn)換為數(shù)組元素類型,然后再設(shè)置到新數(shù)組中。collection:如果不能確定對象類型,則假定集合元素類型為String,并創(chuàng)建一個新的ArrayList,存放所有的字符串。Struts2的類型轉(zhuǎn)換Struts2對null屬性的處理如果屬性聲明為Collection或者List,那么將創(chuàng)建一個ArrayList對象,并賦值為null引用。如果屬性聲明為Map,那么將創(chuàng)建一個HashMap對象,并賦值為null引用。如果屬性是一個具有無參構(gòu)造方法的簡單bean,那么將使用ObjectFactory的buildBean()方法創(chuàng)建一個Bean的實(shí)例。Struts2對集合類型的轉(zhuǎn)換提供了很好的支持,可以用集合對象來保存表單提交的數(shù)據(jù)。Struts2的類型轉(zhuǎn)換使用范例編寫B(tài)ook類Struts2的類型轉(zhuǎn)換使用范例編寫ActionStruts2的類型轉(zhuǎn)換使用范例編寫addBookList.jspStruts2的類型轉(zhuǎn)換使用范例編寫showBookList.jspStruts2的類型轉(zhuǎn)換使用范例編寫struts.xml自定義類型轉(zhuǎn)換器如果Struts2內(nèi)置的類型轉(zhuǎn)換器不能滿足項(xiàng)目需求,Struts2還支持開發(fā)自定義類型轉(zhuǎn)換器,有下列三種方法:實(shí)現(xiàn)ognl.TypeConverter接口繼承ognl.DefaultTypeConvert類繼承org.apache.struts2.util.StrutsTypeConverter類自定義類型轉(zhuǎn)換器范例自定義類型轉(zhuǎn)換器范例編寫自定義類型轉(zhuǎn)換器類自定義類型轉(zhuǎn)換器范例將自定義類型轉(zhuǎn)換器添加到Struts2框架中通過屬性文件來實(shí)現(xiàn),有下面兩種方式:全局類型轉(zhuǎn)換屬性文件:必須位于src根目錄下,同時文件名必須為perties。局部類型轉(zhuǎn)換屬性文件:位于需要轉(zhuǎn)換的Action類的包目錄下,文件名為ClassNperties。java.util.Date=com.demo.converter.BirthdayConvertercom.demo.domain.User.birthday=com.demo.converter.BirthdayConverter輸入校驗(yàn)的必要性在Web應(yīng)用程序中,為了防止客戶端提交的數(shù)據(jù)引發(fā)程序異常,需要對用戶輸入的數(shù)據(jù)進(jìn)行驗(yàn)證。構(gòu)建一個強(qiáng)有力的驗(yàn)證機(jī)制,是保障系統(tǒng)穩(wěn)定運(yùn)行的前提條件。輸入校驗(yàn)?zāi)K的功能一般分為兩個部分:驗(yàn)證輸入數(shù)據(jù)的有效性驗(yàn)證失敗后向用戶提供錯誤信息輸入校驗(yàn)的方式有:客戶端驗(yàn)證(JavaScript)服務(wù)端驗(yàn)證Struts2中輸入校驗(yàn)方法:手動驗(yàn)證驗(yàn)證框架自定義驗(yàn)證器手動驗(yàn)證在Action的方法中編寫驗(yàn)證代碼手動驗(yàn)證validateXxx()和validate()直接在Action的方法中編寫驗(yàn)證代碼的方式,當(dāng)表單較為復(fù)雜、字段較多時容易造成代碼的膨脹,使得完成業(yè)務(wù)邏輯的代碼淹沒在驗(yàn)證代碼中,導(dǎo)致項(xiàng)目難以維護(hù)。一種可行的辦法是將驗(yàn)證代碼剝離出來,在Action方法中調(diào)用這些代碼。Struts2給這種方式提供了便利,只需將方法名命名為validateXxx或validate即可由框架在業(yè)務(wù)代碼執(zhí)行前自動被調(diào)用。驗(yàn)證框架由于輸入校驗(yàn)的重要性和重復(fù)性,就產(chǎn)生了驗(yàn)證框架。Struts2提供了驗(yàn)證框架,由驗(yàn)證器和外部配置文件中定義驗(yàn)證規(guī)則組成。驗(yàn)證器:指執(zhí)行一個驗(yàn)證規(guī)則時驗(yàn)證框架調(diào)用的一個Java類,一個單獨(dú)的驗(yàn)證規(guī)則對應(yīng)一個Java類,然后可以將這些規(guī)則組合成復(fù)雜的規(guī)則集。驗(yàn)證規(guī)則配置文件:驗(yàn)證框架通過讀取驗(yàn)證文件中的驗(yàn)證規(guī)則對輸入數(shù)據(jù)進(jìn)行驗(yàn)證器。驗(yàn)證文件和Action類型在同一包中,文件名為:ClassName-validation.xmlClassName-alias-validation.xml驗(yàn)證規(guī)則配置文件的結(jié)構(gòu)由xwork-validator-x.x.x.dtd定義Struts2提供兩種類型的驗(yàn)證器普通驗(yàn)證器(非字段驗(yàn)證器):不針對特定字段的驗(yàn)證規(guī)則,如驗(yàn)證密碼。字段驗(yàn)證器:執(zhí)行針對特定字段的驗(yàn)證規(guī)則,如是否為空。驗(yàn)證框架使用范例使用驗(yàn)證框架Struts2提供兩種類型的驗(yàn)證器必填驗(yàn)證器required必填字符串驗(yàn)證器requiredstring字符串長度驗(yàn)證器stringlength整數(shù)驗(yàn)證器int雙精度浮點(diǎn)數(shù)驗(yàn)證器double日期驗(yàn)證器date表達(dá)式驗(yàn)證器expression字段表達(dá)式驗(yàn)證器fieldexpression正則表達(dá)式驗(yàn)證器regex郵件地址驗(yàn)證器email自定義驗(yàn)證器1.編寫ValidationCodeAction,用于產(chǎn)生驗(yàn)證碼圖像。自定義驗(yàn)證器2.編寫自定義的結(jié)果類型,用于輸出驗(yàn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論