若用戶(hù)沒(méi)有登錄,則進(jìn)入登錄頁(yè)面,在該頁(yè)面中輸入用戶(hù)名和密碼后提交表單進(jìn)行登錄,請(qǐng)求將被提交到LogInOutAction類(lèi)中的Login()方法進(jìn)行身份驗(yàn)證。Login()方法的代碼如下:
例程50 代碼位置:光盤(pán)\TM\01\src\com\yxq\action\LogInOutAction.java
/* 功能:查詢(xún)數(shù)據(jù)表,驗(yàn)證是否存在該用戶(hù) */
public String Login(){
String sql="select * from tb_user where user_name=? and user_password=?";
Object[] params={user.getUserName(),user.getUserPassword()}; //獲取輸入的用戶(hù)名和密碼,并保存
OpDB myOp=new OpDB();
if(myOp.LogOn(sql, params)){ //存在該用戶(hù),登錄成功
session.put("loginUser",user); //保存當(dāng)前用戶(hù)到session中
return LOGIN; //進(jìn)入后臺(tái)
}
else{ //用戶(hù)名或密碼錯(cuò)誤
addFieldError("loginE",getText("city.login.wrong.input")); //保存提示信息
return INPUT; //返回登錄頁(yè)面
}
}
請(qǐng)求被提交給Login()方法之前,需要進(jìn)行表單驗(yàn)證,所以可實(shí)現(xiàn)validateLogin()方法來(lái)驗(yàn)證表單,其實(shí)現(xiàn)代碼比較簡(jiǎn)單,這里不再給出,具體代碼可查看本書(shū)附帶光盤(pán)。
5.配置cityinfo.xml文件
之所以能在觸發(fā)“進(jìn)入后臺(tái)”超鏈接和提交登錄表單后,請(qǐng)求LogInOutAction類(lèi)相應(yīng)的方法進(jìn)行處理,是因?yàn)樵赾ityinfo.xml文件中指定了它們之間的關(guān)系。配置代碼如下:
例程51 代碼位置:光盤(pán)\TM\01\WEB-INF\classes\cityinfo.xml
<!-- 管理員登錄/退出 -->
<action name="log_*" class="com.yxq.action.LogInOutAction" method="{1}">
<result name="input">/pages/admin/Login.jsp</result>
<result name="login">/pages/admin/view/AdminTemp.jsp</result>
<result name="logout" type="redirectAction">goindex</result>
</action>
1.10 后臺(tái)頁(yè)面設(shè)計(jì)
1.10.1 后臺(tái)頁(yè)面概述
本系統(tǒng)中的所有后臺(tái)頁(yè)面都采用同一個(gè)頁(yè)面框架,該頁(yè)面框架采用二分欄結(jié)構(gòu),分為4個(gè)區(qū)即頁(yè)頭、側(cè)欄、頁(yè)尾和內(nèi)容顯示區(qū),該頁(yè)面框架的總體結(jié)構(gòu)與前臺(tái)頁(yè)面框架的結(jié)構(gòu)相同。網(wǎng)站后臺(tái)首頁(yè)的運(yùn)行效果如圖1.51所示。
1.10.2 后臺(tái)頁(yè)面的技術(shù)分析
本系統(tǒng)中,實(shí)現(xiàn)后臺(tái)頁(yè)面框架的JSP文件為AdminTemp.jsp,該頁(yè)面的布局如圖1.52所示。
本系統(tǒng)中,對(duì)后臺(tái)管理員所有請(qǐng)求的響應(yīng)都通過(guò)該框架頁(yè)面進(jìn)行顯示。在AdminTemp.jsp文件中主要采用include動(dòng)作和include指令來(lái)包含各區(qū)域所對(duì)應(yīng)的JSP文件。其實(shí)現(xiàn)技術(shù)與前臺(tái)頁(yè)面的實(shí)現(xiàn)技術(shù)是相同的,讀者可查看1.6.2節(jié)介紹的前臺(tái)頁(yè)面實(shí)現(xiàn)技術(shù)分析。
1.10.3 后臺(tái)頁(yè)面的實(shí)現(xiàn)過(guò)程
根據(jù)以上的頁(yè)面概述及技術(shù)分析,需要分別創(chuàng)建實(shí)現(xiàn)各區(qū)域的JSP文件,如實(shí)現(xiàn)頁(yè)頭的top.jsp、實(shí)現(xiàn)內(nèi)容顯示區(qū)的main.jsp、實(shí)現(xiàn)側(cè)欄的right.jsp、實(shí)現(xiàn)頁(yè)尾的end.jsp等。下面主要介紹框架頁(yè)面AdminTemp.jsp和main.jsp頁(yè)面的實(shí)現(xiàn)。
在AdminTemp.jsp頁(yè)面中應(yīng)用include指令和動(dòng)作標(biāo)識(shí)來(lái)包含各區(qū)域?qū)?yīng)的JSP文件。代碼如下:
例程52 代碼位置:光盤(pán)\TM\01\pages\admin\view\AdminTemp.jsp
<table>
<tr><td colspan="2"><%@ include file="top.jsp"%></td></tr> <!-- 包含頁(yè)頭文件 -->
<tr><td colspan="2"></td></tr>
<tr>
<td><jsp:include page="main.jsp"/></td> <!-- 包含main.jsp文件 -->
<td><jsp:include page="right.jsp"/></td> <!-- 包含側(cè)欄文件 -->
</tr>
<tr><td colspan="2"></td></tr>
<tr><td colspan="2"><%@ include file="end.jsp" %></td></tr> <!-- 包含頁(yè)尾文件 -->
</table>
在main.jsp文件中實(shí)現(xiàn)了內(nèi)容顯示區(qū)中的背景圖片,并在該頁(yè)面中加載要顯示在內(nèi)容顯示區(qū)中的JSP文件。代碼如下:
例程53 代碼位置:光盤(pán)\TM\01\pages\admin\view\main.jsp
<%
String mainPage=(String)request.getAttribute("mainPage");
if(mainPage==null||mainPage.equals(""))
mainPage="default.jsp";
%>
<table>
<tr><td><img src="images/default_t.jpg"></td></tr>
<tr><td background="images/default_m.jpg" valign="top"><jsp:include page="<%=mainPage%>"/></td></tr>
<tr><td><img src="images/default_e.jpg"></td></tr>
</table>