Ajax进阶篇(一)——异步校验用户名
发布日期:2021-06-30 18:04:36 浏览次数:2 分类:技术文章

本文共 5389 字,大约阅读时间需要 17 分钟。

我们要做的是异步校验用户名的案例,很多网站上实现注册功能的时候,需要输入用户名,当光标离开文本框的时候,会给我们这样一个提示:显示用户名已经存在或者用户名可以使用!我们首先来看一下要做出来的效果:

在这里插入图片描述

搭建环境

新建一个动态Web项目,比如AjaxProject。

在这里插入图片描述
并在WebContent根目录下创建一个用户注册页面,即register.jsp。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
Insert title here
用户名:
密码
邮箱
简介

然后,在MySQL数据库中新建一个user数据库,并在该数据库中新建一个t_user表,表中记录类似如下:

在这里插入图片描述
由于建库建表语句非常简单,所以这里我就省略不写了。

异步校验用户名

开发环境搭建好了之后,接下来我们就要编写程序,异步校验用户名了。

开发数据访问层(dao、dao.impl)

为了提升程序的数据库访问性能,我们通常应在项目开发中使用C3P0数据源。所以应在类目录下加入C3P0的配置文件:c3p0-config.xml。

在这里插入图片描述
c3p0-config.xml配置文件的内容如下:

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/user
root
liayun
10
30
100
10
200
50
100
50
1000
0
5
1
1
1
5
50

也是为了简化JDBC的开发,我们使用Apache组织提供的一个开源JDBC工具类库——commons-dbutils-1.4.jar。然后在com.meimeixia.util包下创建一个工具类——JDBCUtil02.java,用于读取C3P0的xml配置文件创建数据源,该工具类的具体代码如下:

package com.meimeixia.util;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 JDBCUtil02 {
static ComboPooledDataSource dataSource = null; static {
dataSource = new ComboPooledDataSource(); } public static DataSource getDataSource() {
return dataSource; } /** * 获取连接对象 * @return * @throws SQLException */ public static Connection getConn() throws SQLException{
return dataSource.getConnection(); } /** * 释放资源 * @param conn * @param st * @param rs */ public static void release(Connection conn , Statement st , ResultSet rs){
closeRs(rs); closeSt(st); closeConn(conn); } public static void release(Connection conn , Statement st){
closeSt(st); closeConn(conn); } private static void closeRs(ResultSet rs){
try {
if(rs != null){
rs.close(); } } catch (SQLException e) {
e.printStackTrace(); }finally{
rs = null; } } private static void closeSt(Statement st){
try {
if(st != null){
st.close(); } } catch (SQLException e) {
e.printStackTrace(); }finally{
st = null; } } private static void closeConn(Connection conn){
try {
if(conn != null){
conn.close(); } } catch (SQLException e) {
e.printStackTrace(); }finally{
conn = null; } }}

准备好以上这些工作之后,我们正式步入开发数据库访问层的阶段。在com.meimeixia.dao包下创建一个UserDao接口,该接口的具体代码如下:

package com.meimeixia.dao;import java.sql.SQLException;public interface UserDao {
/** * 用于检测用户名是否存在 * @param username * @return true:存在,false:不存在 */ boolean checkUsername(String username) throws SQLException; }

紧接着在com.meimeixia.dao.impl包中新建UserDao接口的实现类,即UserDaoImpl类,该实现类的代码如下:

package com.meimeixia.dao.impl;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.ScalarHandler;import com.meimeixia.dao.UserDao;import com.meimeixia.util.JDBCUtil02;public class UserDaoImpl implements UserDao {
@Override public boolean checkUsername(String username) throws SQLException {
QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource()); String sql = "select count(*) from t_user where username = ?"; Long result = (Long) runner.query(sql, new ScalarHandler(), username); return result > 0; }}

开发web层

当某人在用户注册页面填写用户信息进行注册时,键入用户名之后,会发送请求给服务器端,所以应将请求交给一个Servlet进行处理。于是,我们要在com.meimeixia.servlet中新建一个CheckUsernameServlet,用于校验用户名是否在数据库中已存在。

package com.meimeixia.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.meimeixia.dao.UserDao;import com.meimeixia.dao.impl.UserDaoImpl;public class CheckUsernameServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//1. 检测是否存在 String name = request.getParameter("name"); System.out.println("name = " + name); UserDao dao = new UserDaoImpl(); boolean isExist = dao.checkUsername(name); //2. 通知页面,到底有还是没有 if (isExist) {
response.getWriter().println(1);//存在该用户名 } else {
response.getWriter().println(2);//不存在该用户名 } } catch (Exception e) {
e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

这样,客户端发送请求的同时,不仅想传送一些数据,而且还想获取服务器端回送的数据,那么register.jsp页面的内容就要修改为:

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>
Insert title here
用户名:
密码
邮箱
简介

如果文章有错的地方欢迎指正,大家互相交流。

转载地址:https://liayun.blog.csdn.net/article/details/95039427 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Ajax进阶篇(二)——走进jQuery的世界
下一篇:Java Web基础的查漏补缺——编写一个自己的数据库连接池

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月08日 16时19分24秒