<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-42  評論-578  文章-1  trackbacks-0

    用戶登錄幾乎是每一個(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/目錄下

    <%@ 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>登錄頁</title>
    </head>
    <body>

    <s:fielderror></s:fielderror>

    <form action="login.action" method="post">
        賬號<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)簽庫的話,也可以用Struts 2的Form標(biāo)簽,用之前,要在JSP頭配置上Struts 2標(biāo)簽庫,換成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í)行的方法,即訪問…/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)如下:

    image

    運(yùn)行一下吧:

    image

    image

    image

    一點(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系列教程

    評論:
    # re: Struts 2.1.6 精簡實(shí)例系列教程(2):用戶登錄模塊的實(shí)現(xiàn)[未登錄] 2009-07-26 16:35 | 小毅
    建議把登錄模塊改一下:變成 ajax+json 來驗(yàn)證 錯(cuò)誤提示也用ajax方式來顯示 不要刷新頁面  回復(fù)  更多評論
      
    # re: Struts 2.1.6 精簡實(shí)例系列教程(2):用戶登錄模塊的實(shí)現(xiàn) 2009-07-26 17:18 | 心夢帆影
    @小毅
    我的教程安排中會(huì)一節(jié)“重寫用戶登錄模塊”和“用戶注冊模塊”(整合Jquery+JSON),在新聞發(fā)布模塊完成之后,敬請關(guān)注!  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲中文字幕一二三四区苍井空| 亚洲欧美熟妇综合久久久久| 国产99视频精品免费专区| 亚洲视频免费在线观看| a在线视频免费观看在线视频三区| 夜夜嘿视频免费看| 永久免费观看黄网站| 亚洲色四在线视频观看| 久久99热精品免费观看动漫| 亚洲精品国产成人影院| 18禁黄网站禁片免费观看不卡| 亚洲AV永久精品爱情岛论坛 | 中文字字幕在线高清免费电影| 亚洲成人一区二区| 日本最新免费网站| 亚洲熟妇无码久久精品| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产亚洲综合成人91精品| 成人免费大片免费观看网站| 老司机午夜在线视频免费观| 亚洲国产成人久久精品动漫| 国产精品四虎在线观看免费| 国产成人亚洲精品| 国产性爱在线观看亚洲黄色一级片| 美女免费视频一区二区三区| 亚洲日韩区在线电影| 18禁美女裸体免费网站| 二级毛片免费观看全程| 久久综合亚洲色HEZYO国产| 亚洲免费无码在线| 毛片亚洲AV无码精品国产午夜| 全部免费毛片在线| 国产成人免费爽爽爽视频| 日本黄色动图免费在线观看| eeuss免费影院| 亚洲人成人网毛片在线播放| 国产一级高清免费观看| 毛片免费观看的视频在线| 国产精品怡红院永久免费| 亚洲av无码一区二区三区天堂| 亚洲色一色噜一噜噜噜|