2.2.3.2 AJAX&JSON案例: 检测用户名是否已经被注册(HTML, jQuery, ajax, Servlet, JDBC, DBUtils, json)
第5章 综合案例1.1 案例需求描述检测用户名是否已经被注册在用户注册页面,输入用户名,当用户名输入框失去焦点时,发送异步请求,将输入框的用户名传递给服务器端进行是否存在的校验。1.2 使用技术前台: html jQuery ajax后台: Servlet JDBC C3p0连接池 DBUtils jackson数据库: mysql1.3 案例代码实现1.数据库SQL-- 创建user表CREAT
·
目录
4. 反序编程, JDBC, 后台检查用户名是否在数据库中存在
5. 反序编程, CheckService, 传递需要检测的数据
检测用户名是否已经被注册在用户注册页面,输入用户名,当用户名输入框失去焦点时,发送异步请求,将输入框
的用户名传递给服务器端进行是否存在的校验。
前台: html jQuery ajax
后台: Servlet JDBC C3p0连接池 DBUtils jackson
数据库: mysql

1.存放用户信息的数据库SQL
-- 创建user表
CREATE TABLE USER (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(32),
PASSWORD VARCHAR(32)
);
INSERT INTO USER VALUES(NULL,'zhangsan','123');
INSERT INTO USER VALUES(NULL,'lisi','123');
INSERT INTO USER VALUES(NULL,'wangwu','123');
2.c3p0-config.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/ajax_project</property>
<property name="user">root</property>
<property name="password">123</property>
</default-config>
</c3p0-config>
3.JDBCUtils数据库连接池工具类
package com.lagou.util;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
/**
* 通过该工具类可以获取连接对象和连接池对象
*/
public class JDBCUtils {
//创建c3p0连接池
private static DataSource dataSource = new ComboPooledDataSource();
//提供一个方法 使用连接池
public static DataSource getDataSource(){
return dataSource;
}
//提供一个Connection的连接对象
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
4. 反序编程, JDBC, 后台检查用户名是否在数据库中存在
package com.lagou.dao;
import com.lagou.util.JDBCUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class CheckDao {
//检查用户名是否存在的方法
public boolean daoCheck(String name) throws SQLException {
//1.获取连接池DataSource对象
DataSource dataSource = JDBCUtils.getDataSource();
//2.使用DBUtils
QueryRunner qr = new QueryRunner(dataSource);
//3.查询操作
Long count = (Long) qr.query("select count(*) from user where username = ? ", new ScalarHandler(), name);
//4.如果查到了 count >=1
return count >= 1;
}
}
5. 反序编程, CheckService, 传递需要检测的数据
package com.lagou.service;
import com.lagou.dao.CheckDao;
import java.sql.SQLException;
public class CheckService {
//检查用户是否存在的check方法
public boolean check(String name) throws SQLException {
return new CheckDao().daoCheck(name);
}
}
6. 反序编程, 编写并部署服务端, Servlet,
package com.lagou.web;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lagou.service.CheckService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
@WebServlet("/CheckServlet")
public class CheckServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
//1.设置编码
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//2.获取前台的参数 username
String username = req.getParameter("username");
//3.调用service的check方法得到一个boolean值
boolean flag = new CheckService().check(username);
//4.创建一个Map对象,给map中设置内容
Map<String,Object> map = new HashMap<String ,Object>();
if(flag){
map.put("isExist",true);
map.put("msg","该用户已经存在,请更换");
}else{
map.put("isExist",false);
map.put("msg","该用户名可以使用");
}
//5.map转成json返回给前台.
ObjectMapper om = new ObjectMapper();
String mapJson = om.writeValueAsString(map);
//6.json数据返回给前台
resp.getWriter().println(mapJson);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
7. 编写前台, HTML, jQuery, ajax
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<script src="js/jquery-3.5.1.js"></script>
<script>
/*
* 需求: 当用户名的输入框光标失去,发送ajax请求查询后台,判断用户是否已经存在,最后提示.
* */
$(function(){
//1.给用户名的输入框派发blur事件
$("#uid").blur(function(){
//2.获取用户输入的用户名
var username = $("#uid").val()
//3.发送ajax,传递用户名的参数
//格式: $.post(url,param,function(data){},"text/json")
$.post("/ajax_project/CheckServlet",{"username":username},function(data){
//4.判断 isExist 如果为true, 用户存在, msg设置为红色,放到span中
if(data.isExist){
//不能使用
$("#uid_msg").css("color","red").html(data.msg);
}else{
//用户名可以使用
$("#uid_msg").css("color","green").html(data.msg);
}
},"json")
})
})
</script>
</head>
<body>
<input type="text" name="username" id="uid" placeholder="请输入用户名" />
<span id="uid_msg"></span>
<br/>
<input type="text" name="password" id="ipwd" placeholder="请输入密码" />
<br/>
<input type="submit" value="注册"/>
</body>
</html>
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)