本文記錄struts2主要的配置文件,存放位置,和注意點(diǎn)
(實(shí)際上,這些配置文件都是在class文件夾下起作用,不過凡是放在src文件夾下的,都會(huì)在eclipse編譯時(shí)復(fù)制到對(duì)應(yīng)的class文件夾。)
配置文件名 存放位置 備注
struts.xml src文件夾下 struts2默認(rèn)配置文件
l 可通過<include>來包含別的struts配置文件。
l 在<package>中繼承其他package可以擁有其他package的配置。
l 每個(gè)action最好加一個(gè)名為"input"的<result>,為出錯(cuò)默認(rèn)的返回值
l 關(guān)于<package>的繼承:
如果一個(gè)package要繼承另一個(gè)package,則必須把另一個(gè)package所在的.xml配置文件include進(jìn)來。只有一個(gè)例外,就是繼承structs-default包時(shí),不需要加載struts-default.xml。 因?yàn)閟truts.xml是默認(rèn)包含了struts-default.xml。
在package繼承時(shí),package的先后是沒有關(guān)系的,前面的package一樣能繼承后面的package
(貌似有本"權(quán)威指南"說這個(gè)還是攔截器配置,是順序,有先后的,至少我的測試,package繼承絕對(duì)沒有先后之分)
請(qǐng)看一個(gè)例子,其中有三個(gè)配置文件:
struts-base.xml,struts-middle.xml,和struts.xml
struts-base.xml配置片斷
struts-middle.xml配置片斷
可以看到struts.xml中的配置,package繼承的順序完全是和package定義的位置相反的,不過執(zhí)行并沒有問題。
另外注意一點(diǎn),struts-base.xml中,名base的package直接繼承了struts-default,而沒有引入 struts-default.xml。 你可能會(huì)由此以為每個(gè)配置文件都會(huì)自動(dòng)包含struts-default.xml。不過我個(gè)人認(rèn)為,這是因?yàn)閟truts.xml中同時(shí)包括了struts-default.xml和struts-base.xml,這兩個(gè)文件其實(shí)是在同一個(gè)配置文件中,所以base
struts.properties
l 一些常用的屬性:
struts.custom.properties :用戶自定義屬性文件,多個(gè)用逗號(hào)隔開
struts.devMode:是否處于開發(fā)模式,開發(fā)階段可設(shè)true。
struts.i18n.reload:每次請(qǐng)求到達(dá)重新加載資源文件,開發(fā)階段設(shè)true。
struts.ui.theme: 默認(rèn)視圖主題,默認(rèn)為xhtml
struts.configuration.xml.reload :指定struts.xml改變后自動(dòng)重新加載。默認(rèn)false。
struts.custom.i18n.resources:指定struts2國際化資源文件。
struts.configuration.files:指定struts2默認(rèn)加載的配置文件,該屬性默認(rèn)值為struts-default.xml,struts-plugin.xml,struts.xml
messageResource_language_COUNTRY.properties 與action同目錄 本地化信息配置文件
XXXAcion-conversion.properties 與action同目錄 局部類型轉(zhuǎn)換器配置
aaaa(action中的屬性名) = package.xxxconverter
xwork-conversion.properties src文件夾下 全局類型轉(zhuǎn)換器配置
ttt(類型) = package.xxxConvertor
Element_xxx=xxxType 對(duì)于沒有泛型支持的list,collection
actionname-validation.xml 和action同目錄 action對(duì)應(yīng)的驗(yàn)證配置,actionname 為action的類名
xwork-validation.xml 放在src下 全局驗(yàn)證
關(guān)于驗(yàn)證有一點(diǎn)需留意,默認(rèn)攔截器棧, conversionError攔截器配置都在validation攔截器之前。所以,在進(jìn)行驗(yàn)證之前,conversionError攔截器會(huì)先調(diào)用轉(zhuǎn)換器對(duì)頁面上的屬性進(jìn)行轉(zhuǎn)換,若轉(zhuǎn)換器中拋出錯(cuò)誤,會(huì)通過conversionError攔截器直接把錯(cuò)誤信息返回頁面,所以也不會(huì)經(jīng)過validation了。這樣一來,validation配置里面的友好的提示信息就換成了異常里面編程人員才看得懂的message了,對(duì)于用戶而言不太好。
實(shí)際上validation攔截器所做的是服務(wù)器端驗(yàn)證,它只對(duì)action里面的屬性定義的類型起作用,比如在action中某屬性attrib1是 int型的,那么像正則表達(dá)式之類針對(duì)string的驗(yàn)證器就不會(huì)起作用,這和客戶端驗(yàn)證不同之處在于,客戶端驗(yàn)證把所有類型的輸入都看作string.
所以,頁面輸入的驗(yàn)證,現(xiàn)在可以有3道。
l 第一道是仍然基于javascript的客戶端驗(yàn)證
這一道其實(shí)也可以通過轉(zhuǎn)換器來識(shí)別,轉(zhuǎn)換器最先讀入時(shí),仍然是String型,因此可以在轉(zhuǎn)換過程中對(duì)格式進(jìn)行驗(yàn)證。
l 第二道是轉(zhuǎn)換器轉(zhuǎn)換時(shí)的驗(yàn)證(其實(shí)是拋出轉(zhuǎn)換異常,也可以當(dāng)作輸入格式上的驗(yàn)證)
這一道,默認(rèn)的輸出message比較不友好,不過可以通過在messageResource資源文件中配置這兩個(gè)鍵值加入自己的信息:
1. Xwork.default.invalid.fieldvalue 默認(rèn)類型轉(zhuǎn)換失敗信息
2. Xwork.fieldvalue.屬性名 指定屬性名的類型轉(zhuǎn)換失敗信息。
l 第三道是validation配置文件配置的服務(wù)器端驗(yàn)證。
這些驗(yàn)證類型名可以通過看xwork-x-x.jar中com.opensymphony.xwork2.validator.validators包內(nèi)的default.xml看到
還是得強(qiáng)調(diào)下,服務(wù)器端驗(yàn)證主要關(guān)注的不是參數(shù)的格式,而是參數(shù)的實(shí)際內(nèi)容,服務(wù)器端驗(yàn)證格式反而很不方便。
聯(lián)系客服