隨筆-42  評(píng)論-578  文章-1  trackbacks-0

          用戶登錄幾乎是每一個(gè)Web系統(tǒng)的必需模塊,本期教程就通過(guò)用戶登錄模塊來(lái)講解Struts2.1.6的Action和Result的Annotation配置。

          上期的Struts 2.1.6 精簡(jiǎn)實(shí)例系列教程(1):環(huán)境的搭建與HelloSimple中,我們建的package名為“cn.simple.action”,這些包名有一個(gè)規(guī)則的,只要包含“action,actions,struts,struts2”都會(huì)默認(rèn)被掃描到為Action類,也就是說(shuō),我們只要配置了如“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ì)說(shuō)明,還是強(qiáng)烈建議大家先看官方的文檔http://struts.apache.org/2.1.6/docs/convention-plugin.html

          好,我們開(kāi)始寫我們的用戶登錄模塊吧。先寫個(gè)loginform.jsp,記得,不要忘記我們把JSP文件放在Web-Inf/content/目錄下

          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding="UTF-8"%>
          <%@ taglib prefix="s" uri="/struts-tags" %>
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>登錄頁(yè)</title>
          </head>
          <body>

          <s:fielderror></s:fielderror>

          <form action="login.action" method="post">
              賬號(hào)<input type="text" name="loginName" value="${loginName}"/><br/>
              密碼<input type="password" name="password"><br/>
              <input type="submit" value="登錄"/>
          </form>

          </body>
          </html>

          大家如果想用Struts 2的標(biāo)簽庫(kù)的話,也可以用Struts 2的Form標(biāo)簽,用之前,要在JSP頭配置上Struts 2標(biāo)簽庫(kù),換成Struts 2標(biāo)簽的版本后,即:

          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding="UTF-8"%>
          <%@ taglib prefix="s" uri="/struts-tags" %>
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>Insert title here</title>
          </head>
          <body>

          <s:fielderror></s:fielderror>

          <s:form action="login">
              <s:textfield name="loginName"></s:textfield>
              <s:password name="password"></s:password>
              <s:submit value="登錄"></s:submit>
          </s:form>

          </body>
          </html>

          接著,我們寫一個(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í)行的方法,即訪問(wèn)…/login.action或者…/login,它默認(rèn)會(huì)執(zhí)行這個(gè)方法。

          validate 在執(zhí)行execute方法之前,它會(huì)先執(zhí)行validate這個(gè)方法,檢查登錄框是否輸入正確,這個(gè)方法也是重寫了父類的validate方法。

          getter和setter,有了setter方法,才能使action能拿到上一個(gè)JSP頁(yè)面?zhèn)鬟^(guò)來(lái)的Request域的數(shù)據(jù);有了getter方法,下一個(gè)轉(zhuǎn)發(fā)(dispatcher)過(guò)去的頁(yè)面才能拿到此Action的Request域的數(shù)據(jù)。

          執(zhí)行過(guò)程是這樣:表單提交給LoginAction,LoginAction先執(zhí)行validate方法,檢驗(yàn)loginName和password是否符合要求,如果不符合,就會(huì)addFieldError (把錯(cuò)誤信息放到Field棧里),如果Field棧里有錯(cuò)誤信息的話,它就不會(huì)再執(zhí)行execute方法,直接轉(zhuǎn)發(fā)(Dispatcher)到INPUT即“input”所指定的錯(cuò)誤處理頁(yè)面,這里為location="loginform.jsp",即讓它返回到表單登錄頁(yè)去,如果剛才validate方法中驗(yàn)證正確,即Field棧中沒(méi)有錯(cuò)誤信息,就會(huì)執(zhí)行execute方法。在這里execute返回SUCCESS,即“success”,根據(jù)Result注解,就會(huì)重定向到admin/index.action這個(gè)action。

          返回SUCCESS重定向到的后臺(tái)主頁(yè),其實(shí)簡(jiǎn)單,admin/index.jsp,代碼很簡(jiǎn)單,就在HTML中顯示一句“登錄成功”,代碼略。

          這些的目錄結(jié)構(gòu)如下:

          image

          運(yùn)行一下吧:

          image

          image

          image

          一點(diǎn)提醒:本項(xiàng)目網(wǎng)頁(yè)的排版以精簡(jiǎn)為主,在真實(shí)的網(wǎng)站開(kāi)發(fā)中,建議用Dreamweaver可視化排版,再作必要的修改和嵌入必要的動(dòng)態(tài)標(biāo)簽。

          “Struts 2.1.6 精簡(jiǎn)實(shí)例系列教程(2):用戶登錄模塊的實(shí)現(xiàn)” 講解就到此,你也試一下吧,好,敬請(qǐng)關(guān)注下文!



          本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢(mèng)帆影JavaEE技術(shù)博客)
              

          posted on 2009-07-21 00:14 心夢(mèng)帆影 閱讀(5895) 評(píng)論(2)  編輯  收藏 所屬分類: Struts2.1.6系列教程

          評(píng)論:
          # re: Struts 2.1.6 精簡(jiǎn)實(shí)例系列教程(2):用戶登錄模塊的實(shí)現(xiàn)[未登錄](méi) 2009-07-26 16:35 | 小毅
          建議把登錄模塊改一下:變成 ajax+json 來(lái)驗(yàn)證 錯(cuò)誤提示也用ajax方式來(lái)顯示 不要刷新頁(yè)面  回復(fù)  更多評(píng)論
            
          # re: Struts 2.1.6 精簡(jiǎn)實(shí)例系列教程(2):用戶登錄模塊的實(shí)現(xiàn) 2009-07-26 17:18 | 心夢(mèng)帆影
          @小毅
          我的教程安排中會(huì)一節(jié)“重寫用戶登錄模塊”和“用戶注冊(cè)模塊”(整合Jquery+JSON),在新聞發(fā)布模塊完成之后,敬請(qǐng)關(guān)注!  回復(fù)  更多評(píng)論
            

                  歡迎光臨我的博客,本博客文章均為個(gè)人原創(chuàng),歡迎提出寶貴的意見(jiàn)和建議!(容新華)

          <2009年7月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          隨筆分類(61)

          三人行

          常用網(wǎng)站

          搜索

          •  

          積分與排名

          • 積分 - 476902
          • 排名 - 107

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 甘孜| 阜城县| 绥棱县| 临澧县| 浮梁县| 凤翔县| 文昌市| 恩平市| 利津县| 宜良县| 都安| 腾冲县| 石柱| 白玉县| 河南省| 南宁市| 鹤壁市| 社旗县| 鹿邑县| 榆树市| 精河县| 青州市| 苏尼特左旗| 龙里县| 勃利县| 平果县| 夏津县| 留坝县| 桂阳县| 游戏| 宁明县| 密云县| 灌阳县| 乌恰县| 阳西县| 玉溪市| 玛沁县| 赞皇县| 伊春市| 柳林县| 延寿县|