註冊介面從資料庫中判斷使用者名稱是否存在(jsp+servlet+sqlserver)

你是大聖嗎發表於2020-12-28

在CSDN上找了很多Ajax+jquery方法,但是不適合我用,我看了一些關於用ajax的,他們說不用在資料庫中進行查詢,直接在伺服器段進行查詢判斷就可以知道使用者名稱是否被佔用,但是我拿過來之後發現不可用(也可能我做的方法不對),所以我用了最笨的方法,直接到資料庫中進行查詢判斷,然後提示給使用者(註冊成功或者註冊失敗),Ajax+Jquery這塊我沒有學過(我可能上了個假大學,課堂中從來不講關鍵部分,就撿一些皮毛的介面的講(到面試的時候才知道spring和vue框架是多麼的重要))

如果大家知道ajax+jquery怎麼做!希望能給我發個私信或者留言(雖然這個技術有點老了,但是就想用這個把它做出來,求求了!!!)
迴歸正題:
首先是登陸介面:
zhuce.jsp(名字可以隨便起)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>註冊介面</title>
</head>
<script type="text/javascript">
	function a(){		
		var text1=loginfrm.password1.value;
		var text2=loginfrm.password2.value;
		var text3=loginfrm.username.value;
		
		if(text1=="" || text2=="" || text3==""){
			alert("使用者名稱或密碼不能為空!");
			return false;//false:阻止提交表單
		}
		if(text1!=text2 && text1!="" && text2!=""){
			alert("密碼不一致!");
			return false;//false:阻止提交表單
		}
// 		if(text1==text2 && text1!="" && text2!="" && text3!=""){
// 			alert("註冊成功,跳轉登入介面");
// 			//window.location.href='Login.jsp';
// 		}
	}
</script>
<style>
	.margin{
		margin:20px 300px;
	}
	.textrange{
		width:200px;
	}
</style>
<body>
	<h1 class="margin">註冊介面</h1>
    <form name="loginfrm" action="loginserv.do" method="post" class="margin" onsubmit="return a()">
	    <table>
	    <tr><td>角色</td><td> <select name="role">
                <option value="1">學生</option>
                <option value="2">招聘企業</option>
                 <option value="3">管理員</option>
            </select></td></tr>
		    <tr>
		       	<td>使用者名稱:</td>
		       	<td><input type="text" name="username" class="textrange"></td>
		    </tr>		    
		    <tr>
		       	<td>密&nbsp;&nbsp;&nbsp;&nbsp;碼:</td>
		       	<td><input type="password" name="password1" class="textrange"></td>		       	
			<tr>
		       	<td>確認密碼:</td>
		       	<td><input type="password" name="password2" class="textrange"></td>		     
		    </tr>
	   </table>
	   <input name="button"  type="submit"  value="註冊" >
    </form>
    
</body>
</html>

然後是判斷的servlet(名字也可以隨便取)
ConnectRe(servlet類)
但是要注意的是package com.dao是我自己建立的包,xml的配置,這裡已經採用自動配置@WebServlet("/loginserv.do"),loginserv.do是登錄檔單action提交過來的。

package com.dao;
/*註冊serverlet*/

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class ConnectRe
 */
@WebServlet("/loginserv.do")
public class ConnectRe extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ConnectRe() {
        super();
        // TODO Auto-generated constructor stub
    }
    
      
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//設定編碼
		response.setCharacterEncoding("UTF-8");
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		//(1)通用資訊頭即能用於請求訊息中,也能用於響應資訊中,但與被傳輸的實體內容沒有關係的資訊頭,如Data,
		//Pragma主要: Cache-Control , Connection , Data , Pragma , Trailer , Transfer-Encoding , Upgrade,UTF-8主要解決亂碼的問題
		doPost(request,response);
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//設定編碼
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setHeader("Content-type", "text/html;charset=utf-8");
		
		//獲取引數
		String role = request.getParameter("role");
		String username = request.getParameter("username");
		String userpwd1 = request.getParameter("password1");
		
		try{ 
 
			PrintWriter pw=response.getWriter(); //寫入函式,把資訊寫入資料庫的表格,
			//連線資料庫 
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			System.out.println("資料庫連線"); 
			//得到連線 
			Connection ct=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DataBaseName=managerialsystem","sa","123456");/*第20行*/ 
			System.out.println("連線資料庫成功");
			//建立Statement 
			Statement sm=ct.createStatement(); 
			//得到結果集 
			//ResultSet rs=sm.executeQuery("select top 1 * from users"); 
			//if(rs.next()){ 
			//	pw.println(""); 
			//} 
			String sql;
			sql ="select name from xinxi where name='" + username + "'";  //查詢使用者名稱是否存在
			ResultSet rs = sm.executeQuery(sql);
         	if(rs.next()) {//如果存在時,執行以下程式碼         	
         		System.out.println("該使用者使用者已存在");//控制檯輸出,方便程式碼編寫的人知道程式碼是否正確
         		pw.print("<script language='javascript'>alert('使用者註冊失敗!');window.location.href='register.jsp';</script>");
         		
         	}
         	else {//如果不存在,把資料插入到表格中
			PreparedStatement ps = ct.prepareStatement("insert into xinxi(role,name,password) values(?,?,?)");  //向資料庫存入資料
			ps.setString(1, role);
			ps.setString(2, username);
			ps.setString(3, userpwd1);	
			ps.execute();
			ps.close();
			ct.close();  //資料庫關閉
//			out.println("<script language='javascript'>alert('註冊成功');window.location.href='longon.jsp';</scirpt>");
			System.out.println("資料庫關閉");
			pw.print("<script language='javascript'>alert('使用者註冊成功!');window.location.href='longin.jsp';</script>");
//			request.getRequestDispatcher("/Longin.jsp").forward(request, response);//跳轉介面
         	}	
		}catch (Exception ex){ 
			System.out.println("連線失敗");
			ex.printStackTrace(); 
		}				
	}
}

往資料庫中插入一個叫“韋明”的使用者
在這裡插入圖片描述
因為資料庫中之前已經存在一個名為“韋明”的使用者,待會兒會提示註冊失敗
在這裡插入圖片描述
往資料庫中插入一個叫“韋明勳”的使用者(資料庫中的表之前還沒有這個使用者)
在這裡插入圖片描述

會提示註冊成功,然後跳轉到登陸介面
在這裡插入圖片描述
點選確定,跳轉到註冊介面
在這裡插入圖片描述
此時表格中就成功註冊進來一個交“韋明勳”的使用者
在這裡插入圖片描述
不足點,用姓名的唯一性來做約束,不太現實,因為同名同姓的人太多了,所以應該使用一個編號來(學號或教職工號)來做唯一約束才是可行辦法,但是這裡我為了方便,就用姓名來做約束,後期我會進行修改的。

好啦,到這裡就已經實現從資料庫判斷是否存在一個使用者名稱了,存在則提示註冊失敗,不存在則插入表格中,提示註冊成功。
我做的是登陸註冊是簡易頁面,沒有經過美化,有何不足,歡迎指導,共同進步!

相關文章