mysql 验证用户名重复,Ajax案例——检验用户名是否重复
一、环境搭建
1、导包
这个案例中使用的jar包有三个,需要导入到WEB-INF目录下的lib文件夹中。
导包
2、导入工具库
本案例使用的工具类是之前用过的JDBCUtils。
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JDBCUtils {
// 创建一个连接池:但是这个连接池只需要创建一次即可。
private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
/**
* 获得连接的方法
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
return dataSource.getConnection();
}
/**
* 获得数据源:
*/
public static DataSource getDataSource(){
return dataSource;
}
}
3、创建数据库和表
打开mysql数据库,创建数据库和表,并添加一些记录。
create database ajax_test;
use ajax_test;
create table user (
uid int primary key auto_increment,
username varchar(30),
password varchar(20)
);
insert into user(username,password) values ('itheima','123456');
insert into user(username,password) values ('itcast','qwerty');
数据库
4、修改配置文件
配置文件
二、使用传统的方式实现案例
1、创建JavaBean
package com.itheima.domain;
import java.io.Serializable;
public class User implements Serializable {
private int uid;
private String username;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2、编写regist.jsp页面
pageEncoding="UTF-8"%>
Insert title here
注册页面
用户名:
密码:
注册页面
3、编写RegisterServlet类
RegisterServlet类中仅仅实现请求数据的获取和返回响应信息,逻辑放入UserService类中进行判断。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itheima.domain.User;
import com.itheima.service.UserService;
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应类型定和编码
response.setContentType("text/html;charset:UTF-8");
//获取输出流对象
PrintWriter out = response.getWriter();
//获取表单提交的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
//封装数据
User user = new User(null,username,password);
//将数据传入service进行逻辑判断
UserService service = new UserService();
Boolean flag = service.checkUsername(username);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
4、编写UserService类
UserService类实现对逻辑的判断,用户名是否已经被注册,但是数据库中数据的获取需要在UserDao类中实现。
import java.util.List;
import com.itheima.dao.UserDao;
import com.itheima.domain.User;
public class UserService {
public Boolean checkUsername(String username){
//查询数据库中是否已经有该用户名
UserDao dao = new UserDao();
User user = dao.findUserByUsername(username);
}
}
5、编写UserDao类
在UserDao类中实现对数据库中数据的查询,查询数据库中是否有用户注册时输入的用户名的信息。
package com.itheima.dao;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.itheima.domain.User;
import com.itheima.utils.JDBCUtils;
public class UserDao {
public User findUserByUsername(String username) {
User user = null;
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
try {
user = qr.query("select * from user where username = ?", new BeanHandler(User.class), username);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}
}
6、完善UserService类
如果UserDao类中返回的User对象为空,说明这个用户名没有被注册过,返回一个true,否则返回false。
package com.itheima.service;
import java.util.List;
import com.itheima.dao.UserDao;
import com.itheima.domain.User;
public class UserService {
public Boolean checkUsername(String username){
//查询数据库中是否已经有该用户名
UserDao dao = new UserDao();
User user = dao.findUserByUsername(username);
//如果返回null,说明该用户名没有注册
if(user == null){
return true;
}
return false;
}
}
7、完善RegisterServlet类
如果UserService中的service方法返回的是true,说明用户名没有被注册,返回注册成功的提示信息;如果返回的是false,说明用户名已经被注册,设置域对象,转发请求信息,提示用户名已经被注册。
package com.itheima.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itheima.domain.User;
import com.itheima.service.UserService;
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应类型定和编码
response.setContentType("text/html;charset:UTF-8");
//获取输出流对象
PrintWriter out = response.getWriter();
//获取表单提交的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
//封装数据
User user = new User(null,username,password);
//将数据传入service进行逻辑判断
UserService service = new UserService();
Boolean flag = service.checkUsername(username);
//如果返回true,说明用户名没有被创建,可以注册
if(flag){
out.println("恭喜您!注册成功!");
}else{
//如果用户名已经被注册了,则设置域对象,返回提示性信息
request.setAttribute("error", "用户名已经被注册了!");
request.setAttribute("user", user);
//将请求转发回注册页面
request.getRequestDispatcher("/register.jsp").forward(request, response);
return;
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
8、完善注册页面
对注册页面进行完善,使用el表达式将用户名被注册的信息提示出来,并在用户名文本框中显示用户之前输入的用户名。
pageEncoding="UTF-8"%>
Insert title here
注册页面
用户名:${error}
密码:
案例实现结果
输入数据库中没有的用户信息
用户注册
注册成功
输入数据库中已有的用户信息
用户名已经被注册
三、使用AJAX方式实现案例
在上面的案例中,我们可以发现,当用户输入完注册信息后,点击注册按钮,才会提示用户名已经被注册了,并且页面被刷新了,这样的页面用户体验较差。
现在我们想实现:用户名能够动态的进行判断,如果用户输入一个已经被注册的用户名,直接就会显示提示信息;如果用户点击用户名这个文本框后没有输入信息,并且又点击了其他地方,会提示用户没有输入用户名;并且在实现这些功能的时候,页面不会被刷新。
接下来我们对案例进行改写
对jsp页面进行修改
实现三个功能(页面不刷新):
(1)用户名文本框失去焦点的时候,提示用户名不能为空
(2)用户名重复,提示用户名已经被注册了
(3)用户名不重复,提示用户名可以注册
pageEncoding="UTF-8"%>
Insert title here
//为用户名文本框添加这个方法,在文本框失去焦点以后运行
//就是当用户填写完用户名后,进行下一步填写的时候,异步执行这个方法
function checkUsername(){
//获取用户名文本框对象
var username = document.getElementsByName("username")[0].value;
//获取提示信息span对象
var span1 = document.getElementsByTagName("span")[0];
if(username == ""){
span1.innerHTML = "用户名不能为空!";
return;
}
//创建请求对象
var xmlHttp = new XMLHttpRequest();
//设置请求状态变化时触发的事件
xmlHttp.onreadystatechange = function(){
//如果请求状态码为4,说明请求已经完成,响应已经就绪
if(xmlHttp.readyState == 4){
//响应状态码为200,响应完成
if(xmlHttp.status == 200){
//获取服务器返回的信息
var data = xmlHttp.responseText;
//判断返回的信息,输出响应的提示信息
if(data == 0){
//如果返回0,说明用户名不重复,可以使用
span1.innerHTML = "用户名可以使用!";
}else{
//说明用户名重复,不能使用
span1.innerHTML = "用户名已经被注册!";
}
}
}
}
//创建连接
xmlHttp.open("GET","/web14_test1/RegisterAJAXServlet?username="+username,true);
//发送请求
xmlHttp.send();
}
注册页面
用户名:
密码:
创建一个新的RegisterAJAXServlet
我们可以将RegisterServlet类的代码复制过来进行修改,返回简单的提示信息,由js方法进行判断,所以就不用设置响应编码,也不用获取用户输入的密码。
这里就体现了我们MVC三层架构的好处,只需要修改servlet,逻辑层和数据层都不需要修改。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itheima.domain.User;
import com.itheima.service.UserService;
public class RegisterAJAXServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取输出流对象
PrintWriter out = response.getWriter();
//获取表单提交的数据
String username = request.getParameter("username");
//将数据传入service进行逻辑判断
UserService service = new UserService();
Boolean flag = service.checkUsername(username);
//AJAX方式
if(flag){
//如果返回true,说明用户名没有被创建,可以注册,返回0
out.println(0);
}else{
//用户名已经被注册,返回1
out.println(1);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
AJAX方式实现案例成果
注册页面
用户名文本框不输入内容失去焦点时
用户名为空
用户名重复时
用户名重复
用户名不重复时
用户名不重复
完成注册
完成注册
mysql 验证用户名重复,Ajax案例——检验用户名是否重复相关推荐
- ssm用ajax校验用户名,SSM之检验用户名是否重复
1.controller(事务处理)层方法 /*** *检验学院名是否重复(是否可用) ResponseBody:返回的是json数据 * @param xueyuan_name * @param r ...
- asp.net 用户注册怎么判断用户名是否重复 ajax,AJAX_asp.net结合Ajax验证用户名是否存在的代码,1, 使用JavaScript js文件,验证 - phpStudy...
asp.net结合Ajax验证用户名是否存在的代码 1, 使用JavaScript js文件,验证用户名是否存在 复制代码 代码如下: var ajax = function(option) { va ...
- SSM之检验用户名是否重复
1.controller(事务处理)层方法 /*** *检验学院名是否重复(是否可用) ResponseBody:返回的是json数据 * @param xueyuan_name * @param r ...
- ajax 用户验证js,js ajax验证用户名
回答 jQuery的ajax 验证用户名的例子/验证用户名 js 方法 uname:输入的用户名 function ajax_check_uname(uname){ var url='/check/u ...
- php链接mysql验证用户登录,PHP连接mysql验证用户名是否存在
登录界面 用户名: if (isset($_POST['submit'])) { $us = $_POST["user_name"]; $conn = mysqli_connect ...
- 正则表达式案例:用户名验证
案例:用户名验证 功能需求: 如果用户名输入合法,则后面提示信息为 : 用户名合法,并且颜色为绿色. 如果用户名输入不合法, 则后面提示信息为: 用户名不符合规范,并且颜色为红色. 分析: 用户名只能 ...
- 在PHP中应用AJAX技术检测用户名是否重复
<html> <head> <title>在PHP中应用AJAX技术检测用户名</title> <meta http-equiv="Co ...
- SVN使用MySQL验证用户名密码(HTTP)
安装过程全部采用yum 1 yum -y install subversion httpd mod_auth_mysql mod_dav_svn mod_ssl 使用MySQL验证是依赖于mod_au ...
- svn mysql_SVN使用MySQL验证用户名密码(HTTP)
安装过程全部采用yumyum -y install subversion httpd mod_auth_mysql mod_dav_svn mod_ssl 使用MySQL验证是依赖于mod_auth_ ...
最新文章
- Series([] , [‘索引‘]) 数据字典 {‘项值 ’:键值}
- Android应用程序更新并下载
- 【MPI高性能计算】用集合通信改进梯形求和积分
- 【网络安全】Windows cmd的命令混淆学习思路
- 梯度下降(Gradient Descent)的收敛性分析
- 改进型的时钟置换算法-解惑
- 【华为云技术分享】GeminiDB for Cassandra 流功能介绍
- Json.Net学习笔记(十) 保持对象引用
- [Vue CLI 3] 配置 webpack-bundle-analyzer 插件
- mysql中设置create_time和update_time默认值并实时更新
- hdfs命令_HDFS命令
- python开发_filecmp
- aviary 图片编辑器
- 再见2020,你好2021
- SwiftUI中sheet弹出嵌在NavigationView中的子视图无法用presentationMode关闭(dismiss)弹出视图的解决
- 尤雨溪的5KB petite-vue源码解析
- 基于halcon的直线查找之卡尺
- C语言,班级班费管理系统
- e-icon-picker
- 南卡骨传导耳机斩获缪斯国际设计大奖,成为中国品牌影响力的代表
热门文章
- SVG 的平移、旋转和缩放
- java gzip 压缩解压工具类
- 【职场】工作上遇到的问题
- 传奇架设需要准备以下条件
- 通用计算机仍旧遵循冯诺依曼,冯·诺依曼计算机体系
- Leetcode 1024 - 视频拼接
- stable-baselines3学习之Logger
- 华为鸿蒙2.0如何安装谷歌服务框架
- markdown写作教程总结
- karas报错filename = 'fine_tuned_net.h5', file descriptor = 24, errno = 28, error message = 'No space l