电脑编程用户注册界面java_用JSP/Servlet开发简单的用户注册系统
用JSP/Servlet開發(fā)簡(jiǎn)單的用戶注冊(cè)系統(tǒng)
2.4界面編程實(shí)現(xiàn)
通過JavaBeans封裝了大部分的邏輯或數(shù)據(jù)操作功能。這樣,JSP頁(yè)面中就可以減少很多Java代碼,從而使得JSP的建立和修改變得方便。
2.4.1登錄驗(yàn)證頁(yè)面
用戶注冊(cè)系統(tǒng)主要是為了保護(hù)一些資源不被未被授權(quán)的用戶訪問,因此在具體應(yīng)用中,如果沒有登錄的用戶訪問到那些被保護(hù)的資源,如何才能提示用戶需要登錄或注冊(cè)?
假設(shè)用戶訪問index.jsp頁(yè)面,而該頁(yè)面只能是注冊(cè)用戶才能訪問,那么在index.jsp的頁(yè)頭加入下列語(yǔ)句:
這表示要在本頁(yè)index.jsp其他代碼運(yùn)行前,必須先運(yùn)行signin.jsp。signin.jsp是用戶的登錄頁(yè)面,用戶通過登錄頁(yè)面實(shí)現(xiàn)用戶和密碼的驗(yàn)證。
登錄頁(yè)面signin.jsp的代碼如下:
charset=UTF-8" %>
scope="session" class="com.jdon.simpleregister.SignIn"
/>
if (signIn.getAction() != null){
if (!signIn.validate())
out.println("
用戶名或密碼錯(cuò)誤");if? (signIn.SignIn())
out.println("
登錄成功");}
if
(!signIn.isAuth()){?? //如果沒有進(jìn)行過登錄驗(yàn)證
%>
用戶注冊(cè)
method="post">
value="login">
用戶:
name="userid" size="10">
密碼:
type="password" name="password"
size="10">
value="Reset">
//將之前參數(shù)保存起來,準(zhǔn)備再次提交
java.util.Enumeration e=request.getParameterNames();
while(e.hasMoreElements()){
String
param=(String)e.nextElement();
out.println("
name=\""+param+"\"
value=\""+request.getParameter(param)+"\"
>");
} %>
?return;
}%>
在這個(gè)signIn.jsp中實(shí)現(xiàn)了兩大功能:第一是提供用戶第一次登錄驗(yàn)證功能;第二是保存第一次登錄驗(yàn)證信息。
首先,在signin.jsp中,提供了登錄用表單界面顯示,當(dāng)用戶填寫好表單Form按提交后,實(shí)現(xiàn)表單中用戶名和密碼的驗(yàn)證功能。
signin.jsp通過檢查signIn.getAction()是否為空來判斷當(dāng)前是顯示表單還是處理表單,只有用戶提交登錄表單,signIn.getAction()將為“l(fā)ogin”,這是執(zhí)行signIn.
SignIn()方法,將提交表單中的用戶名和密碼與數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行比較,如果驗(yàn)證錯(cuò)誤,signIn.isAuth()還是不為真,將繼續(xù)顯示登錄表單要求用戶再次輸入,直至登錄驗(yàn)證正確。
如果用戶已經(jīng)通過了驗(yàn)證,SignIn實(shí)例將以Session形式繼續(xù)存在,因?yàn)樗斜槐Wo(hù)的JSP頁(yè)面都會(huì)include這個(gè)signin.jsp文件。因此,將每次都調(diào)用signIn.isAuth(),而同一個(gè)用戶每次訪問的都是同一個(gè)SignIn實(shí)例。這樣,該用戶第一次通過查詢數(shù)據(jù)庫(kù)登錄驗(yàn)證后,以后就不必再次實(shí)行數(shù)據(jù)庫(kù)操作,提高了頁(yè)面處理速度。這也是緩沖Cache的一種優(yōu)勢(shì)體現(xiàn)。
新用戶注冊(cè)是本項(xiàng)目的主要功能,需要顯示用戶應(yīng)該輸入的相應(yīng)條目,用戶輸入Form表單數(shù)據(jù)后,將提交另外一個(gè)JSP頁(yè)面處理。現(xiàn)在將這兩個(gè)功能也合并在一個(gè)JSP頁(yè)面中實(shí)現(xiàn)。同時(shí)個(gè)人資料有新增和修改兩個(gè)功能,在signup.jsp中也將這兩個(gè)功能合并在一起。
在signup.jsp實(shí)現(xiàn)4個(gè)功能:個(gè)人資料新增表單的顯示;處理新增表單;個(gè)人資料修改表單的顯示;處理修改后的表單。
注冊(cè)頁(yè)面signup.jsp的代碼主要結(jié)構(gòu)如下:
charset=UTF-8" %>
//如果本頁(yè)面出錯(cuò),直接顯示errorpage.jsp內(nèi)容
errorPage="errorpage.jsp?from=signup.jsp" %>
import="com.jdon.simpleregister.Constants"%>
scope="session" class="com.jdon.simpleregister.SignIn"
/>
scope="page" class="com.jdon.simpleregister.Profile" />
property="*" />
//如果提交的是新增動(dòng)作
if (request.getParameter("add")!=null)
{
//并且現(xiàn)有數(shù)據(jù)庫(kù)這個(gè)email沒有存在
if (prof.EmailExist()){
%>
page="error.jsp?error_info=email已經(jīng)存在 請(qǐng)重新調(diào)換一個(gè)!"
flush="true"/>
return;
}
//通過Profile類的insert()方法將提交的表單中數(shù)據(jù)插入
int rs=prof.insert();
%>注冊(cè)成功!
}else if
(request.getParameter("edit")!=null) //如果是編輯
{
// SignIn實(shí)例必須在session中存在,在SignIn實(shí)例中
//保存用戶的用戶和密碼
if? (!signIn.SignIn())??? {
out.println("No login");
return;
}
//處理用戶修改后的表單數(shù)據(jù)
prof.update();
%>注冊(cè)資料修改成功!
}else{
%>
method=post οnsubmit="return Juge(this);">
//將SignIn實(shí)例中的userid賦值給Profile實(shí)例prof
prof.setUserid(signIn.getUserid());
//prof根據(jù)輸入的參數(shù)userId,查詢?cè)撚脩魯?shù)據(jù)庫(kù)中其他數(shù)據(jù),并保存在
//prof相關(guān)變量中
if (signIn.SignIn() && prof.select()){
%>
用戶名:
type="hidden" name="edit" value="1">
}else{//否則 當(dāng)前為顯示個(gè)人資料新增表單
用戶名
class="button" name="userid" value="" size=10>
}
%>
…
新增個(gè)人資料和編輯個(gè)人資料的重要區(qū)別是:后者用戶必須是登錄后的,即執(zhí)行signin.jsp并且驗(yàn)證成功。因?yàn)閟cope是session,那么SignUp這個(gè)類的實(shí)例就在內(nèi)存中一直存在,直到該用戶離開系統(tǒng),其他JSP就可以直接從內(nèi)存中獲得SignUp實(shí)例中變量,這些變量的值由用戶在signin.jsp輸入的。
個(gè)人資料新增表單的示意圖如圖2-4所示。
如果用戶通過登錄頁(yè)面登錄成功后,再執(zhí)行signup.jsp,結(jié)果顯示也幾乎是圖2-4,不同的是,各個(gè)數(shù)據(jù)空格中已經(jīng)有相應(yīng)的數(shù)據(jù)值,新增和編輯都使用的是同一個(gè)JSP頁(yè)面,這樣顯得簡(jiǎn)潔有效。
在signup.jsp中使用了
errorPage="errorpage.jsp?from=signup.jsp" %>,這表示signup.jsp萬(wàn)一發(fā)生錯(cuò)誤,不直接顯示那些錯(cuò)誤,而是轉(zhuǎn)而顯示errorpage.jsp。在errorpage.jsp會(huì)顯示更加友好的提示信息,比如“對(duì)不起,頁(yè)面出錯(cuò)了,請(qǐng)和系統(tǒng)管理員聯(lián)系”。塑造一個(gè)界面友好的系統(tǒng)是成熟產(chǎn)品的一個(gè)象征,如圖2-5所示。
?????
圖2-4個(gè)人資料新增頁(yè)面圖2-5出錯(cuò)幫助頁(yè)面
2.5調(diào)試、發(fā)布和運(yùn)行
單元測(cè)試是非常重要的。本項(xiàng)目中關(guān)鍵的是兩個(gè)通用類,要對(duì)這兩個(gè)通用類實(shí)現(xiàn)單元測(cè)試,以保證功能符合要求地正常運(yùn)行。
關(guān)于重要類的單元測(cè)試成功后,需要將本項(xiàng)目放置在Web容器中進(jìn)行集成測(cè)試。這時(shí),如果JSP中包含過多的Java代碼,將使得JSP的調(diào)試變得異常困難。只有在設(shè)計(jì)編碼時(shí),將有關(guān)業(yè)務(wù)邏輯的功能代碼在JavaBeans中實(shí)現(xiàn),依靠JavaBeans的成功測(cè)試,這樣才能保證JSP頁(yè)面的測(cè)試能夠快速通過。
本項(xiàng)目中需要對(duì)兩個(gè)通用類實(shí)現(xiàn)單元測(cè)試,一方面因?yàn)樗鼈児δ芊浅V匾?#xff0c;另外一方面因?yàn)檫@兩個(gè)通用類涉及到系統(tǒng)環(huán)境的配置。
以E-mail發(fā)送的SendMail.java測(cè)試為例。使用JUnit實(shí)現(xiàn)單元測(cè)試,Junit(http://www.junit.org)是一個(gè)開放源代碼的測(cè)試軟件,應(yīng)用非常廣泛。
Junit的使用非常簡(jiǎn)單,實(shí)際只要兩步:
(1)繼承junit.framework.TestCase類編寫自己的測(cè)試類;
(2)在測(cè)試類中編寫自己的testXXXXX()方法。
一般開發(fā)J2EE系統(tǒng)都會(huì)使用IDE工具輔助開發(fā),在以后章節(jié)中談到在J2EE開發(fā)中為什么必須依賴IDE才能提高開發(fā)速度。JBuilder作為首選的IDE工具使用也非常廣泛,在JBuilder中使用Junit更加方便。
首先,需要在JBuilder中安裝Junit的庫(kù)文件junit.jar,然后在JBuilder中建立一個(gè)新的TestCase,取名為TestSendMail,它是繼承junit.framework.TestCase的,用來測(cè)試SendMail.java,代碼如下:
import junit.framework.*;
public class TestSendMail extends TestCase {
private SendMail sendMail = null;
protected void setUp() throws Exception {
super.setUp();
//構(gòu)造SendMail的一個(gè)實(shí)例
sendMail = new SendMail();
}
protected void tearDown() throws Exception {
sendMail = null;
super.tearDown();
}
}
上面測(cè)試代碼的基本框架已經(jīng)完成,下面就是增加自己的測(cè)試方法,需要對(duì)SendMail.java的sendnow()方法實(shí)行測(cè)試,因此在TestSendMail.java中加入testSendnow(),方法如下:
public void testSendnow() {
sendMail.setMsgText("hello this is test");
sendMail.setFrom("banq@jdon.com");
sendMail.setSmtpHost("localhost");
sendMail.setTo("banq@jdon.com");
sendMail.setSubject("test");
try {
sendMail.sendnow();
} catch (Exception e) {
System.err.println(" error:
" + e);
}
}
在JBuilder中,建立TestSendMail.java測(cè)試類的同時(shí),已經(jīng)在這個(gè)project的run中自動(dòng)增加一個(gè)TestSendMail的配置。因此,現(xiàn)在就可以直接運(yùn)行TestSendMail測(cè)試類了。
注意,TestSendMail中發(fā)送郵件的SMTP服務(wù)器是設(shè)置成localhost。那么如果使用Windows 2000,就要配置Windows的SMTP服務(wù)功能,當(dāng)然也可以指定其他域名或IP地址作為SMTP服務(wù)器。
通過運(yùn)行TestSendMail,在沒有錯(cuò)誤顯示的情況下,banq@jdon.com會(huì)收到一封該測(cè)試類發(fā)出的信件。
總結(jié)
以上是生活随笔為你收集整理的电脑编程用户注册界面java_用JSP/Servlet开发简单的用户注册系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac版smali2java_Andro
- 下一篇: java将jfif格式转换成ipg_wi