<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

    用戶登錄幾乎是每一個Web系統的必需模塊,本期教程就通過用戶登錄模塊來講解Struts2.1.6的Action和Result的Annotation配置。

    上期的Struts 2.1.6 精簡實例系列教程(1):環境的搭建與HelloSimple中,我們建的package名為“cn.simple.action”,這些包名有一個規則的,只要包含“action,actions,struts,struts2”都會默認被掃描到為Action類,也就是說,我們只要配置了如“cn.simple.action”、“cn.simple.struts”、“cn.simple.action.admin”等包名,就可以不用在配置文件struts.xml(Struts2.0的配置文件)中配置這些Action類了。當然,這些包名,也可以是別的,但要寫一點點配置,我們就用默認的吧。關于這方面的詳細說明,還是強烈建議大家先看官方的文檔http://struts.apache.org/2.1.6/docs/convention-plugin.html

    好,我們開始寫我們的用戶登錄模塊吧。先寫個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的標簽庫的話,也可以用Struts 2的Form標簽,用之前,要在JSP頭配置上Struts 2標簽庫,換成Struts 2標簽的版本后,即:

    <%@ 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>

    接著,我們寫一個登錄處理的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;
        }
    }

    解釋一下這個類吧:

    execute 這個方法是重寫了父類ActionSupport的方法,是Action默認會執行的方法,即訪問…/login.action或者…/login,它默認會執行這個方法。

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

    getter和setter,有了setter方法,才能使action能拿到上一個JSP頁面傳過來的Request域的數據;有了getter方法,下一個轉發(dispatcher)過去的頁面才能拿到此Action的Request域的數據。

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

    返回SUCCESS重定向到的后臺主頁,其實簡單,admin/index.jsp,代碼很簡單,就在HTML中顯示一句“登錄成功”,代碼略。

    這些的目錄結構如下:

    image

    運行一下吧:

    image

    image

    image

    一點提醒:本項目網頁的排版以精簡為主,在真實的網站開發中,建議用Dreamweaver可視化排版,再作必要的修改和嵌入必要的動態標簽。

    “Struts 2.1.6 精簡實例系列教程(2):用戶登錄模塊的實現” 講解就到此,你也試一下吧,好,敬請關注下文!



    本文原創,轉載請注明出處,謝謝!http://www.tkk7.com/rongxh7(心夢帆影JavaEE技術博客)
        

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

    評論:
    # re: Struts 2.1.6 精簡實例系列教程(2):用戶登錄模塊的實現[未登錄] 2009-07-26 16:35 | 小毅
    建議把登錄模塊改一下:變成 ajax+json 來驗證 錯誤提示也用ajax方式來顯示 不要刷新頁面  回復  更多評論
      
    # re: Struts 2.1.6 精簡實例系列教程(2):用戶登錄模塊的實現 2009-07-26 17:18 | 心夢帆影
    @小毅
    我的教程安排中會一節“重寫用戶登錄模塊”和“用戶注冊模塊”(整合Jquery+JSON),在新聞發布模塊完成之后,敬請關注!  回復  更多評論
      
    主站蜘蛛池模板: a级毛片毛片免费观看永久| 日韩在线观看免费完整版视频| 久久精品一区二区免费看| 亚洲国产精品专区在线观看| 色欲色欲天天天www亚洲伊| 色妞WWW精品免费视频| 亚洲偷偷自拍高清| 午夜视频在线在免费| 亚洲欧洲无码AV电影在线观看 | 色偷偷亚洲第一综合网| 日本不卡视频免费| 国产亚洲成在线播放va| 亚洲日韩中文字幕日韩在线| 天黑黑影院在线观看视频高清免费| 日本红怡院亚洲红怡院最新| 亚洲欧洲免费视频| 亚洲乱码在线观看| 又黄又爽无遮挡免费视频| 亚洲精品国产日韩无码AV永久免费网| 黑人大战亚洲人精品一区| 国产免费爽爽视频在线观看| 亚洲高清视频免费| 成人毛片18女人毛片免费96| 国产精品亚洲а∨无码播放不卡| 亚洲一本大道无码av天堂| 久久午夜无码免费| 国产精品高清视亚洲精品| 免费永久在线观看黄网站| 国产午夜精品理论片免费观看| 久久亚洲AV成人无码国产| 在线免费不卡视频| 国产又黄又爽胸又大免费视频| 亚洲一区中文字幕久久| 韩国18福利视频免费观看| 久久久久久国产a免费观看不卡| 精品日韩亚洲AV无码| 四虎在线播放免费永久视频| 久久青草免费91观看| 亚洲高清乱码午夜电影网| 亚洲成色www久久网站夜月| 成年女人毛片免费视频|