【12-1】通过Ajax异步验证用户名是否存在

工程目录

【12-1】通过Ajax异步验证用户名是否存在

一、说明

  • 此实验只判断用户表中是否存在用户输入的账户,并没有进行注册写入数据库操作
  • 焦点改变时触发函数

二、代码

Check.java

package witersen.servlet;

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 javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Check")
public class Check extends HttpServlet {
    private static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String DBURL = "jdbc:mysql://localhost:3306/demo1001?useSSL=false&serverTimezone=UTC";
    private static final String DBUSER = "root";
    private static final String DBPASSWORD = "";

    public Check() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        PrintWriter out = response.getWriter();
        String username = request.getParameter("username");
        try {
            Class.forName(this.DBDRIVER);
            conn = DriverManager.getConnection(this.DBURL, this.DBUSER, this.DBPASSWORD);
            String sql = "select count(id) from user where username=?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, username);
            rs = pstmt.executeQuery();
            if (rs.next()) {
                if (rs.getInt(1) > 0) {
                    out.print("true");
                } else {
                    out.print("false");
                }
            }
            pstmt.close();
            out.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<script type="text/javascript">
	var xmlHttp;
	var flag;
	function createXMLHttp() {
		if (window.XMLHttpRequest) {
			xmlHttp = new XMLHttpRequest();
		} else {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	function checkUsername(username) {
		createXMLHttp();
		xmlHttp.open("POST", "Check?username="
				+ username);
		xmlHttp.onreadystatechange = checkUsernameCallback;
		xmlHttp.send(null);
		document.getElementById("msg").innerHTML = "正在验证.................";
	}
	function checkUsernameCallback() {
		if (xmlHttp.readyState == 4) {
			if (xmlHttp.status == 200) {
				var text = xmlHttp.responseText;
				if (text == "true") {
					flag = false;
					document.getElementById("msg").innerHTML = "<span style=\"color: #be3b3b\">用户名已被使用</span>";
					document.getElementById("reg").setAttribute("disabled","true"); //设置不可点击
				} else {
					flag = true;
					document.getElementById("msg").innerHTML = "<span style=\"color: #43cf78\">验证通过</span>";
					document.getElementById("reg").removeAttribute("disabled"); //移除不可点击
				}
			}
		}
	}
</script>
<body>
	<form method="post" action="">
		用户名:<input type="text" name="username"
			onblur="checkUsername(this.value)"><span id="msg"></span><br>
		密码:<input type="password" name="password"> <br><input id="reg"
			type="submit" value="注册"> <input type="reset" value="重置">
	</form>
</body>
</html>

生成数据库的sql语句

CREATE DATABASE  IF NOT EXISTS `demo1001` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `demo1001`;
-- MySQL dump 10.13  Distrib 8.0.21, for Win64 (x86_64)
--
-- Host: localhost    Database: demo1001
-- ------------------------------------------------------
-- Server version	8.0.21

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `user`
--

DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
  `username` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `user`
--

LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES ('admin','admin'),('admin1','admin2'),('admin12','admin'),('witersen','witersen');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2020-12-09 10:58:49

原创文章,作者:witersen,如若转载,请注明出处:https://www.witersen.com

(4)
witersen的头像witersen
上一篇 2020年12月8日 下午11:31
下一篇 2020年12月9日 下午5:36

相关推荐

发表回复

登录后才能评论