用戶登錄幾乎是每一個(gè)Web系統(tǒng)的必需模塊,本期教程就通過用戶登錄模塊來講解Struts2.1.6的Action和Result的Annotation配置。
上期的Struts 2.1.6 精簡實(shí)例系列教程(1):環(huán)境的搭建與HelloSimple中,我們建的package名為“cn.simple.action”,這些包名有一個(gè)規(guī)則的,只要包含“action,actions,struts,struts2”都會(huì)默認(rèn)被掃描到為Action類,也就是說,我們只要配置了如“cn.simple.action”、“cn.simple.struts”、“cn.simple.action.admin”等包名,就可以不用在配置文件struts.xml(Struts2.0的配置文件)中配置這些Action類了。當(dāng)然,這些包名,也可以是別的,但要寫一點(diǎn)點(diǎn)配置,我們就用默認(rèn)的吧。關(guān)于這方面的詳細(xì)說明,還是強(qiáng)烈建議大家先看官方的文檔http://struts.apache.org/2.1.6/docs/convention-plugin.html。
好,我們開始寫我們的用戶登錄模塊吧。先寫個(gè)loginform.jsp,記得,不要忘記我們把JSP文件放在Web-Inf/content/目錄下
大家如果想用Struts 2的標(biāo)簽庫的話,也可以用Struts 2的Form標(biāo)簽,用之前,要在JSP頭配置上Struts 2標(biāo)簽庫,換成Struts 2標(biāo)簽的版本后,即:
接著,我們寫一個(gè)登錄處理的Action類:loginAction.java,代碼如下:
package cn.simple.action; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import com.opensymphony.xwork2.ActionSupport; @Results({ @Result(name="success", location="admin/index.action", type="redirect"), @Result(name="input", location="loginform.jsp", type="dispatcher") }) public class LoginAction extends ActionSupport { private String loginName; private String password; @Override public String execute() throws Exception { return SUCCESS; } @Override public void validate() { if( ! "simple".equals(loginName)){ addFieldError("loginName", "登錄名不正確!"); }else if(! "simple".equals(password)){ addFieldError("password", "密碼不正確!"); } } //*******Getter和Setter方法***********// public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } |
解釋一下這個(gè)類吧:
execute 這個(gè)方法是重寫了父類ActionSupport的方法,是Action默認(rèn)會(huì)執(zhí)行的方法,即訪問…/login.action或者…/login,它默認(rèn)會(huì)執(zhí)行這個(gè)方法。 validate 在執(zhí)行execute方法之前,它會(huì)先執(zhí)行validate這個(gè)方法,檢查登錄框是否輸入正確,這個(gè)方法也是重寫了父類的validate方法。 getter和setter,有了setter方法,才能使action能拿到上一個(gè)JSP頁面?zhèn)鬟^來的Request域的數(shù)據(jù);有了getter方法,下一個(gè)轉(zhuǎn)發(fā)(dispatcher)過去的頁面才能拿到此Action的Request域的數(shù)據(jù)。 執(zhí)行過程是這樣:表單提交給LoginAction,LoginAction先執(zhí)行validate方法,檢驗(yàn)loginName和password是否符合要求,如果不符合,就會(huì)addFieldError (把錯(cuò)誤信息放到Field棧里),如果Field棧里有錯(cuò)誤信息的話,它就不會(huì)再執(zhí)行execute方法,直接轉(zhuǎn)發(fā)(Dispatcher)到INPUT即“input”所指定的錯(cuò)誤處理頁面,這里為location="loginform.jsp",即讓它返回到表單登錄頁去,如果剛才validate方法中驗(yàn)證正確,即Field棧中沒有錯(cuò)誤信息,就會(huì)執(zhí)行execute方法。在這里execute返回SUCCESS,即“success”,根據(jù)Result注解,就會(huì)重定向到admin/index.action這個(gè)action。 |
返回SUCCESS重定向到的后臺(tái)主頁,其實(shí)簡單,admin/index.jsp,代碼很簡單,就在HTML中顯示一句“登錄成功”,代碼略。
這些的目錄結(jié)構(gòu)如下:
運(yùn)行一下吧:
一點(diǎn)提醒:本項(xiàng)目網(wǎng)頁的排版以精簡為主,在真實(shí)的網(wǎng)站開發(fā)中,建議用Dreamweaver可視化排版,再作必要的修改和嵌入必要的動(dòng)態(tài)標(biāo)簽。
“Struts 2.1.6 精簡實(shí)例系列教程(2):用戶登錄模塊的實(shí)現(xiàn)” 講解就到此,你也試一下吧,好,敬請關(guān)注下文!
本文原創(chuàng),轉(zhuǎn)載請注明出處,謝謝!http://www.tkk7.com/rongxh7(心夢帆影JavaEE技術(shù)博客)
posted on 2009-07-21 00:14
心夢帆影 閱讀(5885)
評論(2) 編輯 收藏 所屬分類:
Struts2.1.6系列教程