正文

都市供求信息網(wǎng)(21)

JSP項(xiàng)目開(kāi)發(fā)案例全程實(shí)錄(第2版) 作者:明日科技


(9)運(yùn)行測(cè)試。單擊Eclipse菜單欄中的按鈕,在彈出的菜單中選擇“運(yùn)行方式/JUnit測(cè)試”命令運(yùn)行測(cè)試,若顯示圖1.43所示的運(yùn)行結(jié)果,則說(shuō)明Count類(lèi)中的encrypt()方法正確;否則,說(shuō)明encrypt()方法中存在錯(cuò)誤或方法實(shí)現(xiàn)的功能與預(yù)設(shè)計(jì)的不同。 1.9 后臺(tái)登錄設(shè)計(jì)

1.9.1 后臺(tái)登錄功能概述

用戶(hù)可通過(guò)單擊前臺(tái)頁(yè)面頂部的“進(jìn)入后臺(tái)”超鏈接,進(jìn)入后臺(tái)登錄頁(yè)面,如圖1.48所示。

為了防止任意用戶(hù)進(jìn)入后臺(tái),進(jìn)行非法操作,所以需要設(shè)置登錄功能。當(dāng)用戶(hù)沒(méi)有輸入用戶(hù)名和密碼,或輸入了錯(cuò)誤的用戶(hù)名和密碼進(jìn)行登錄時(shí),會(huì)返回登錄頁(yè)面顯示相應(yīng)的提示信息,如圖1.49所示。

后臺(tái)登錄模塊的操作流程如圖1.50所示。

在實(shí)現(xiàn)登錄功能時(shí),對(duì)于已經(jīng)登錄的用戶(hù),當(dāng)再次單擊前臺(tái)頁(yè)面頂部的“進(jìn)入后臺(tái)”超鏈接時(shí),應(yīng)直接進(jìn)入后臺(tái)主頁(yè),而不是再次顯示如圖1.48所示的登錄頁(yè)面要求用戶(hù)登錄,該功能的具體實(shí)現(xiàn)過(guò)程,將在1.9.3節(jié)中進(jìn)行介紹。

1.9.2 后臺(tái)登錄技術(shù)分析

在后臺(tái)登錄模塊中,對(duì)于已登錄的用戶(hù)要跳過(guò)登錄頁(yè)面,直接進(jìn)入后臺(tái)主頁(yè)。實(shí)現(xiàn)該功能的主要技術(shù)就是:在當(dāng)前用戶(hù)登錄成功后,向session中注冊(cè)一個(gè)屬性,并為該屬性賦值,當(dāng)用戶(hù)再次單擊“進(jìn)入后臺(tái)”超鏈接時(shí),先在程序中獲取存儲(chǔ)在session中該屬性的值,然后通過(guò)判斷其值來(lái)得知當(dāng)前用戶(hù)是否已經(jīng)登錄,從而決定將請(qǐng)求轉(zhuǎn)發(fā)到登錄頁(yè)面還是后臺(tái)首頁(yè)。

1.9.3 后臺(tái)登錄的實(shí)現(xiàn)過(guò)程

后臺(tái)登錄用到的數(shù)據(jù)表:tb_user。

根據(jù)技術(shù)分析,用戶(hù)單擊頁(yè)面頂部的“進(jìn)入后臺(tái)”超鏈接請(qǐng)求登錄時(shí),會(huì)先判斷用戶(hù)是否已經(jīng)登錄。若沒(méi)有登錄,則進(jìn)入登錄頁(yè)面,在該頁(yè)面中填寫(xiě)用戶(hù)名和密碼后,提交表單,在A(yíng)ction處理類(lèi)中獲取表單數(shù)據(jù)進(jìn)行驗(yàn)證,驗(yàn)證成功后查詢(xún)數(shù)據(jù)表,查詢(xún)是否存在用戶(hù)輸入的用戶(hù)名和密碼,若存在,則登錄成功,進(jìn)入網(wǎng)站后臺(tái)。如果用戶(hù)已經(jīng)登錄,則直接進(jìn)入后臺(tái)。下面按照這個(gè)流程,介紹后臺(tái)登錄的實(shí)現(xiàn)過(guò)程。

1.實(shí)現(xiàn)“進(jìn)入后臺(tái)”超鏈接

在view目錄下的top.jsp文件中實(shí)現(xiàn)進(jìn)入后臺(tái)的超鏈接。代碼如下:

例程45 代碼位置:光盤(pán)\TM\01\view\top.jsp

<a href="log_isLogin.action">[進(jìn)入后臺(tái)]</a>

上述代碼實(shí)現(xiàn)的超鏈接所請(qǐng)求的路徑為log_isLogin.action,觸發(fā)該超鏈接產(chǎn)生的請(qǐng)求將由LogInOutAction類(lèi)中的isLogin()方法處理,isLogin()方法用來(lái)判斷用戶(hù)是否已經(jīng)登錄。

2.設(shè)計(jì)登錄頁(yè)面Login.jsp

在登錄頁(yè)面中,應(yīng)包含一個(gè)表單,并提供“用戶(hù)名”和“密碼”兩個(gè)表單字段以便用戶(hù)輸入數(shù)據(jù)。Login.jsp頁(yè)面的關(guān)鍵代碼如下:

例程46 代碼位置:光盤(pán)\TM\01\pages\admin\Login.jsp

<%@ taglib prefix="s2" uri="/struts-tags" %>

<s2:form action="log_Login.action" theme="simple">

<tr><td colspan="2"><s2:fielderror/></td></tr> <!-- 輸出提示信息 -->

<tr>

<td>用戶(hù)名: </td>

<td><s2:textfield name="user.userName" size="30"/></td>

</tr>

<tr>

<td>密 碼: </td>

<td><s2:password name="user.userPassword" size="30"/></td>

</tr>

</s2:form>

3.創(chuàng)建封裝登錄表單數(shù)據(jù)的JavaBean

該JavaBean用來(lái)保存輸入的用戶(hù)名和密碼。代碼如下:

例程47 代碼位置:光盤(pán)\TM\01\src\com\yxq\model\UserSingle.java

package com.yxq.model;

public class UserSingle{

private String userName; //對(duì)應(yīng)表單中的“用戶(hù)名”字段

private String userPassword; //對(duì)應(yīng)表單中的“密碼”字段

……//省略了屬性的setXXX()與getXXX()方法

}

4.創(chuàng)建LogInOutAction類(lèi)

LogInOutAction類(lèi)用來(lái)處理用戶(hù)登錄和退出登錄請(qǐng)求。代碼如下:

例程48 代碼位置:光盤(pán)\TM\01\src\com\yxq\action\LogInOutAction.java

package com.yxq.action;

import com.yxq.actionSuper.MySuperAction;

import com.yxq.dao.OpDB;

import com.yxq.model.UserSingle;

public class LogInOutAction extends MySuperAction {

protected UserSingle user; //封裝表單數(shù)據(jù)的JavaBean

public UserSingle getUser() {

return user;

}

public void setUser(UserSingle user) {

this.user = user;

}

……//此處為判斷當(dāng)前用戶(hù)是否登錄的isLogin()方法

……//此處為驗(yàn)證用戶(hù)身份的Login()方法

……//此處為處理退出登錄的Logout()方法

……//此處為表單驗(yàn)證方法validateLogin()

}

當(dāng)用戶(hù)觸發(fā)“進(jìn)入后臺(tái)”超鏈接后,請(qǐng)求由LogInOutAction類(lèi)中的isLogin()方法驗(yàn)證用戶(hù)是否已經(jīng)登錄。isLogin()方法的代碼如下:

例程49 代碼位置:光盤(pán)\TM\01\src\com\yxq\action\LogInOutAction.java

/* 功能:判斷當(dāng)前用戶(hù)是否登錄 */

public String isLogin(){

Object ob=session.get("loginUser");

if(ob==null||!(ob instanceof UserSingle)) //如果對(duì)象為空,或者不是UserSingle類(lèi)的實(shí)例,表示沒(méi)有登錄

return INPUT; //返回登錄頁(yè)面

else //已經(jīng)登錄

return LOGIN; //進(jìn)入后臺(tái)

 


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) www.dappsexplained.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)