首先講一下這個登錄界面可實現的功能:
1.基本界面有了;
2.具有容錯性,如果什么都不輸入,直接點確定,會提示錯誤;
3.連接了數據庫,建了表,可以實現注冊,以及登錄;
4.能夠正常登陸進去;
5.如果登錄的賬號密碼不正確,會提示重新登錄。
下面講講具體怎么實現?
首先我們要理清思路:
1.登錄界面輸入用戶的ID和口令;
2.然后點擊確定按鈕,我們先要在客戶端對文本框中的東西進行驗證;
3.如果格式正確,則提交到控制器進行驗證,如果不存在這個用戶或者密碼不正確都會提示重新登錄,驗證正確的話,則進入登錄成功的界面,否則進入登錄失敗的界面;
4.如果文本框的內容格式不正確,那么光標會自動停在出錯的文本框里。
那么第一步,我們首先創建數據庫:
在數據庫應用軟件中創建我們需要的數據庫,並且建一個我們需要用的表。
如下圖所示:

第二步,創建登錄界面:
先用HTML的知識寫出了基本顯示,然后在提交表單之前,會先用javascript寫的方法對表單元素進行驗證,使其具有正確的格式;當格式正確時,才會把表單元素里的標簽提交到下一個頁面里。
代碼如下:
<%@ page contentType="text/html; charset=gb2312"%>
<script language="JavaScript">
function isValidate(form){
//得到用戶輸入的用戶名和密碼
userid=form.userid.value;
userpass=form.userpass.value;
//接下來先驗證用戶名
//如果用戶名的長度小於六
if(userid.length<6){
alert("用戶名的長度小於六。");
form.userid.focus();
return false;
}
//如果用戶名的長度大於8
if(userid.length>8){
alert("用戶名的長度大於八。");
form.userid.focus();
return false;
}
//接下來驗證口令
//如果密碼的長度小於六
if(userpass.length<6){
alert("密碼的長度小於六。");
form.userpass.focus();
return false;
}
//如果密碼的長度大於8
if(userpass.length>8){
alert("密碼的長度大於八。");
form.userpass.focus();
return false;
}
//密碼與用戶名不能相等
if(userpass==username){
alert("密碼與用戶名不能相等");
form.userpass.focus;
return false;
}
}
</script>
<html>
<head>
<title>登錄界面</title>
</head>
<body>
<h2 align="center">登錄界面</h2>
<form name=form1 action="login" method="post" onsubmit="return isValidate(form1)">
<table align="center">
<tr>
<td>用戶ID:</td>
<td><input type="text" name="userid" >6~8位</td>
</tr>
<tr>
<td>口令:</td>
<td><input type="password" name="userpass" >6~8位,且不能與用戶ID相同</td>
</tr>
<tr>
<td><input type="reset" value="重置"></td>
<td><input type="submit" value="確定"></td>
</tr>
</table>
</form>
<table align="center">
<tr>
<td><input type="button" value="點擊注冊用戶" onclick="window.location.href='register.jsp'" /></td>
</tr>
</table>
</body>
</html>
第三步:編寫連接數據庫,以及對表單元素的驗證。
由於JSP主要用於顯示,所以我又再寫了一個servlet用於對輸入的信息進行處理;
首先寫一個方法,從數據庫中查找登錄界面中輸入的用戶名的密碼,如果有,則返回正確的密碼,
否則 ,返回null;
然后重寫doget方法,對登錄進行響應,如果輸入的密碼與從數據庫中返回的密碼相同,那么轉到登錄成功后的界面,如果登錄失敗,那么則提示用戶重新登錄。
具體代碼如下:
package servlets; import java.io.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import javax.servlet.*; import javax.servlet.http.*; import bean.*; public class LoginServlet extends HttpServlet { //該方法用戶驗證用戶名和密碼 public int check(String userid,String userpass) { String URL="jdbc:mysql://127.0.0.1:3306/bookstore"; String NAME="root"; String PASS="*********"; String SQL="select userpass from userinfo where userid='"+userid+"'"; try { //加載驅動 Class.forName("com.mysql.jdbc.Driver"); //連接對象 Connection con=DriverManager.getConnection(URL, NAME, PASS); //語句對象 Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(SQL); //得到該用戶名的密碼 String tmpPass=""; if(rs.next()) { tmpPass=rs.getString(1); } //關閉對象,釋放資源 rs.close(); stmt.close(); con.close(); //判斷密碼是否正確 if(tmpPass.equals(userpass)) { return 1; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0; } /* (non-Javadoc) * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //獲取用戶的用戶名和口令 request.setCharacterEncoding("utf-8"); String userid=request.getParameter("userid"); String userpass=request.getParameter("userpass"); int result=check(userid,userpass); //要轉向的文件 String forward; //如果登錄成功,就把用戶名寫入session中,並且轉向success.jsp, //否則轉向failure.jsp if(result==1){ forward="manager.jsp"; } else forward="login_failure.jsp"; RequestDispatcher dispatcher=request.getRequestDispatcher(forward); //完成跳轉 dispatcher.forward(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request,response); } }
至此,登錄這個功能也就算是實現了。
下面是結果截圖:

輸入的格式不正確時:

出錯的情況下:

登錄成功時:

