說(shuō)明:本文經(jīng)過(guò)筆者對(duì)struts
一. 實(shí)例說(shuō)明
本例是Struts2的簡(jiǎn)單實(shí)例,通過(guò)本工程的學(xué)習(xí),我們將會(huì)對(duì)struts2的表單以及表單驗(yàn)證有一個(gè)初步的認(rèn)識(shí)、了解struts2的配置以及初探Struts2的本地化輸出。
二. 編碼準(zhǔn)備
1. 包的引入
在MyEclipse或NetBeans中建立web工程,將所需的包放入WebRoot/lib目錄中,本實(shí)例所需的包有:
commons-logging-1.1.jar
freemarker-
ognl-
struts2-core-
xwork-
這些包在struts-
2. web.xml的配置
要使struts能正常工作,需修改web.xml的內(nèi)容,為其增加struts2的FilterDispatcher,修改后的web.xml的內(nèi)容如下:



















3. 建立源碼目錄和jsp存放目錄
在src目錄下建立example文件夾,用于存放本實(shí)例的java文件等。在WebRoot文件夾下建立子文件夾example,用于存放本工程的jsp文件。
三. 編碼
1. Welcome.jsp和Login.jsp的編寫(xiě)
首先我們建立Welcome.jsp,該文件包含兩個(gè)鏈接,點(diǎn)擊“登錄”鏈接后跳轉(zhuǎn)到登錄信息輸入頁(yè)面,點(diǎn)擊“注冊(cè)”按鈕跳轉(zhuǎn)到注冊(cè)頁(yè),為了學(xué)習(xí)struts2配置中的通配符使用,我們暫不實(shí)現(xiàn)注冊(cè)功能。Welcome.jsp的代碼如下:
















在該頁(yè)面的頂部,我們需要將struts2的標(biāo)簽庫(kù)引入,語(yǔ)句為:<%@ taglib prefix="s" uri="/struts-tags" %>
在該頁(yè)面,主要用到struts2的<s:url>標(biāo)簽,該頁(yè)面主要用到該標(biāo)簽的兩個(gè)屬性,分別為value和action,其中action屬性表示用action來(lái)產(chǎn)生url,而value表示使用的目標(biāo)值。在頁(yè)面上點(diǎn)擊“查看源文件”按鈕,可看到生成的語(yǔ)句分別變?yōu)椋?/span>
<link href="/struts2-blank-
<a href="/struts2-blank-
<a href="/struts2-blank-
由此可知使用該標(biāo)簽時(shí),struts2會(huì)自動(dòng)為我們帶上下文路徑,對(duì)于加了屬性action的<s:url>標(biāo)簽,后面會(huì)自動(dòng)帶上“.action”作為后綴。
點(diǎn)擊“登錄”鏈接后,跳轉(zhuǎn)到Login.jsp頁(yè)面,該頁(yè)包含一個(gè)登錄表單,讓用戶(hù)輸入用戶(hù)名和密碼信息,用戶(hù)點(diǎn)擊提交按鈕,跳轉(zhuǎn)到指定的Action——Login進(jìn)行處理。Login.jsp的內(nèi)容如下:















該頁(yè)用到Struts2的表單標(biāo)簽<s:form>、<s:textfield>和<s:password>。
<s:form>的action屬性表示表單提交后跳轉(zhuǎn)的action的名稱(chēng),此處為Login,該標(biāo)簽最終將生成HTML的form;
<s:textfield>標(biāo)簽類(lèi)同于HTML的<input type=”text” …>,其中name表示屬性域的名稱(chēng),label表示其前的提示名;
<s:password>標(biāo)簽類(lèi)同于HTML的<input type=”password” …>,其name和label類(lèi)同于<s:textfield>,在此略。
2. 配置文件struts.xml和example.xml
在上述jsp頁(yè)面,我們需跳轉(zhuǎn)到兩個(gè)Action地址,需在struts2的配置文件中配置,因當(dāng)工程變大時(shí),一個(gè)龐大的struts2的配置極難維護(hù),建議按包路徑分開(kāi)配置文件,所以本實(shí)例除了struts.xml配置文件外,還新增了一個(gè)額外的配置文件example.xml。該文件在struts.xml中引用。struts.xml放在src目錄下,該文件的內(nèi)容如下:











可看到該文件通過(guò)<include file="example.xml"/>將example.xml也作為struts2的配置文件。
接下來(lái),讓我們看看example.xml的配置:


















3. Login和ExampleSupport類(lèi)以及驗(yàn)證配置類(lèi)Login-validation.xml的編寫(xiě)
在配置文件example.xml中,定義了兩個(gè)Action,下面我們用代碼來(lái)實(shí)現(xiàn)這兩個(gè)Action
首先讓我們來(lái)看看ExampleSupport這個(gè)Action,這個(gè)Action不做任何操作,集成自ActionSupport,是本工程的各Action類(lèi)的基類(lèi),該類(lèi)的代碼如下:





接著讓我們來(lái)看看Login這個(gè)Action,該類(lèi)繼承自ExampleSupport類(lèi),該Action需實(shí)現(xiàn)的業(yè)務(wù)邏輯如下:
1) 當(dāng)用戶(hù)名(username)或密碼(password)有一者或兩者為空時(shí),登錄不成功,跳轉(zhuǎn)到登錄信息輸入頁(yè)面;
2) 當(dāng)用戶(hù)名(username)和密碼(password)都不為空時(shí),登錄成功,跳轉(zhuǎn)到主菜單頁(yè)。
對(duì)于用戶(hù)名和密碼的驗(yàn)證,我們可以先考慮在Login類(lèi)中用代碼實(shí)現(xiàn)的方式,此時(shí)該類(lèi)的代碼如下:




































當(dāng)工程變得愈發(fā)復(fù)雜時(shí),這一小段一小段驗(yàn)證代碼將會(huì)變得難以維護(hù),出于此原因,我們可以考慮采用struts2提供的驗(yàn)證機(jī)制來(lái)實(shí)現(xiàn)。在src目錄下建立實(shí)現(xiàn)驗(yàn)證的xml文件Login-validation.xml,為Login Action中的username和password屬性增加非空驗(yàn)證,驗(yàn)證配置如下:

















當(dāng)驗(yàn)證未通過(guò)時(shí),將不會(huì)進(jìn)入Login Action中的execute方法,此時(shí)可刪除掉Login這個(gè)Action中的驗(yàn)證內(nèi)容,該類(lèi)的execute方法直接跳轉(zhuǎn)到SUCCESS即可,修改后的代碼略。
4. 本地化輸出——資源文件package.properties
為了本地化的輸出驗(yàn)證錯(cuò)誤信息,我們可以將參數(shù)信息和錯(cuò)誤信息放入資源文件中,資源文件package.properties位于src/example目錄下,內(nèi)容如下:
requiredstring = ${getText(fieldName)}不能為空.
password = 密碼
username = 用戶(hù)名
Missing.message = 該部分尚未構(gòu)建,請(qǐng)稍候訪(fǎng)問(wèn)...
在src/example目下下建立對(duì)應(yīng)的中文資源文件package_zh_CN.properties,為了避免中文亂碼問(wèn)題,我們編寫(xiě)一個(gè)批處理文件code.bat來(lái)對(duì)package.properties進(jìn)行編碼處理,主要用到native2ascii命令,其內(nèi)容如下:
copy package.properties package_zh_CN.properties.gbk
native2ascii -encoding GBK package_zh_CN.properties.gbk package_zh_CN.properties
運(yùn)行該批處理文件,可在package_zh_CN.properties中可看到編碼后的資源文件信息,如下:
requiredstring = ${getText(fieldName)}\u4e0d\u80fd\u4e
password = \u5bc6\u7801
username = \u7528\u6237\u540d
Missing.message = \u8be5\u90e8\u5206\u
5. Register.jsp和Missing.jsp的編寫(xiě)
在2中的example.xml中,我們配置了通配符映射,在Welcome.jsp中,我們使用
<a href="<s:url action="Register"/>">注冊(cè)</a>
其中的Register在example中找不到相關(guān)映射,于是在用戶(hù)點(diǎn)擊“注冊(cè)”按鈕時(shí),將映射到通配符所映射的Action:example. ExampleSupport.而后跳轉(zhuǎn)到Register.jsp頁(yè)面,其代碼如下:



該頁(yè)面包含Missing.jsp頁(yè)面,其代碼如下:













四.總結(jié)
到此為止,我們的實(shí)例已構(gòu)建完,可通過(guò)瀏覽器訪(fǎng)問(wèn):http://localhost:8080/struts2-blank-2.0.8/example/Welcome.jsp看到我們的勞動(dòng)成果。下面總結(jié)一下我們?cè)谠搶?shí)例中學(xué)到的東西。
1. 常用的一些標(biāo)簽的使用
在本實(shí)例中,我們學(xué)習(xí)了<s:textfield>、<s:password>、<s:form>以及<s:url>的使用。
2. 表單數(shù)據(jù)的驗(yàn)證
本文描述了一個(gè)簡(jiǎn)單的表單的數(shù)據(jù)非空驗(yàn)證。
3. 本地化輸出錯(cuò)誤提示信息
在驗(yàn)證失敗時(shí),用資源文件來(lái)輸出錯(cuò)誤提示信息。
4.Strut2配置文件中通配符的使用
對(duì)于某些地址,我們可以使用在struts2的配置通配符來(lái)使其映射到某個(gè)Action中去。
下一篇:實(shí)例篇:struts2-mailreader-
上一篇:基礎(chǔ)篇:本地化輸出