(9)運行測試。單擊Eclipse菜單欄中的按鈕,在彈出的菜單中選擇“運行方式/JUnit測試”命令運行測試,若顯示圖1.43所示的運行結果,則說明Count類中的encrypt()方法正確;否則,說明encrypt()方法中存在錯誤或方法實現(xiàn)的功能與預設計的不同。 1.9 后臺登錄設計
1.9.1 后臺登錄功能概述
用戶可通過單擊前臺頁面頂部的“進入后臺”超鏈接,進入后臺登錄頁面,如圖1.48所示。
為了防止任意用戶進入后臺,進行非法操作,所以需要設置登錄功能。當用戶沒有輸入用戶名和密碼,或輸入了錯誤的用戶名和密碼進行登錄時,會返回登錄頁面顯示相應的提示信息,如圖1.49所示。
后臺登錄模塊的操作流程如圖1.50所示。
在實現(xiàn)登錄功能時,對于已經登錄的用戶,當再次單擊前臺頁面頂部的“進入后臺”超鏈接時,應直接進入后臺主頁,而不是再次顯示如圖1.48所示的登錄頁面要求用戶登錄,該功能的具體實現(xiàn)過程,將在1.9.3節(jié)中進行介紹。
1.9.2 后臺登錄技術分析
在后臺登錄模塊中,對于已登錄的用戶要跳過登錄頁面,直接進入后臺主頁。實現(xiàn)該功能的主要技術就是:在當前用戶登錄成功后,向session中注冊一個屬性,并為該屬性賦值,當用戶再次單擊“進入后臺”超鏈接時,先在程序中獲取存儲在session中該屬性的值,然后通過判斷其值來得知當前用戶是否已經登錄,從而決定將請求轉發(fā)到登錄頁面還是后臺首頁。
1.9.3 后臺登錄的實現(xiàn)過程
后臺登錄用到的數(shù)據(jù)表:tb_user。
根據(jù)技術分析,用戶單擊頁面頂部的“進入后臺”超鏈接請求登錄時,會先判斷用戶是否已經登錄。若沒有登錄,則進入登錄頁面,在該頁面中填寫用戶名和密碼后,提交表單,在Action處理類中獲取表單數(shù)據(jù)進行驗證,驗證成功后查詢數(shù)據(jù)表,查詢是否存在用戶輸入的用戶名和密碼,若存在,則登錄成功,進入網(wǎng)站后臺。如果用戶已經登錄,則直接進入后臺。下面按照這個流程,介紹后臺登錄的實現(xiàn)過程。
1.實現(xiàn)“進入后臺”超鏈接
在view目錄下的top.jsp文件中實現(xiàn)進入后臺的超鏈接。代碼如下:
例程45 代碼位置:光盤\TM\01\view\top.jsp
<a href="log_isLogin.action">[進入后臺]</a>
上述代碼實現(xiàn)的超鏈接所請求的路徑為log_isLogin.action,觸發(fā)該超鏈接產生的請求將由LogInOutAction類中的isLogin()方法處理,isLogin()方法用來判斷用戶是否已經登錄。
2.設計登錄頁面Login.jsp
在登錄頁面中,應包含一個表單,并提供“用戶名”和“密碼”兩個表單字段以便用戶輸入數(shù)據(jù)。Login.jsp頁面的關鍵代碼如下:
例程46 代碼位置:光盤\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>用戶名: </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用來保存輸入的用戶名和密碼。代碼如下:
例程47 代碼位置:光盤\TM\01\src\com\yxq\model\UserSingle.java
package com.yxq.model;
public class UserSingle{
private String userName; //對應表單中的“用戶名”字段
private String userPassword; //對應表單中的“密碼”字段
……//省略了屬性的setXXX()與getXXX()方法
}
4.創(chuàng)建LogInOutAction類
LogInOutAction類用來處理用戶登錄和退出登錄請求。代碼如下:
例程48 代碼位置:光盤\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;
}
……//此處為判斷當前用戶是否登錄的isLogin()方法
……//此處為驗證用戶身份的Login()方法
……//此處為處理退出登錄的Logout()方法
……//此處為表單驗證方法validateLogin()
}
當用戶觸發(fā)“進入后臺”超鏈接后,請求由LogInOutAction類中的isLogin()方法驗證用戶是否已經登錄。isLogin()方法的代碼如下:
例程49 代碼位置:光盤\TM\01\src\com\yxq\action\LogInOutAction.java
/* 功能:判斷當前用戶是否登錄 */
public String isLogin(){
Object ob=session.get("loginUser");
if(ob==null||!(ob instanceof UserSingle)) //如果對象為空,或者不是UserSingle類的實例,表示沒有登錄
return INPUT; //返回登錄頁面
else //已經登錄
return LOGIN; //進入后臺