程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts 2.1.6精簡實例系列教程(2):用戶登錄模塊的實現

Struts 2.1.6精簡實例系列教程(2):用戶登錄模塊的實現

編輯:關於JAVA

用戶登錄幾乎是每一個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" "http://www.w3.org/TR/html4/loose.dtd">
<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" "http://www.w3.org/TR/html4/loose.dtd">
<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中顯示一句“登錄成功”,代碼略。

這些的目錄結構如下:

運行一下吧:

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved