图书购买系统之注册页面--实现实时验证

本文介绍了一个用户注册系统的实现过程,包括注册页面的设计、前后端交互逻辑、表单验证及数据库操作等内容。通过JSP页面、JavaScript验证、Ajax实时检查与Servlet处理等技术实现了完整的用户注册流程。

1.注册效果图


2.register.jsp源码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>register</title>
		<!--引入bootstrap.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrap/css/bootstrap.css"/>
		<!--引入myscss.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/myscss.css"/>
		<!--验证表单-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrapvalidate/css/bootstrapValidator.css" />
		<!--引入jquery.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/jquery-3.1.1.js"></script>
		<!--bootstrap.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/bootstrap.js"></script>
		<!--表单验证的相关组件-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrapvalidate/js/bootstrapValidator.js" ></script>	
		<!--register.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/foreground/login/register.js"></script>
	</head>
	<body>
		<!--标题-->
		<!-- <div id="navhead"></div> -->
		<%@include file="/foreground/common/head.jsp"%>
		<!--注册-->
		<div class="container">
			<div class="row">
				<form class="form-horizontal" action="${pageContext.request.contextPath}/RegisterServlet" method="post">
					<h2 class="text-center">新会员注册</h2>
					<div class="form-group margintop">
						<label class="col-md-4 control-label">会员邮箱</label>
						<div class="col-md-4">
							<input type="text" id="email" name="email" class="form-control" placeholder="请输入邮箱">
						</div>
						<!-- <div class="col-md-4">
							<span id="email_msg" class="text-danger lineheight">请输入有效的邮箱地址</span>
						</div> -->
					</div>
					<div class="form-group">
						<label class="col-md-4 control-label">会员名</label>
						<div class="col-md-4">
							<input type="text" id="username" name="name" class="form-control" placeholder="请输入会员名">
						</div>
						<!-- <div class="col-md-4">
							<span id="username_msg" class="text-danger lineheight">会员名必须大于6位</span>
						</div> -->
					</div>
					<div class="form-group">
						<label class="col-md-4 control-label">密码</label>
						<div class="col-md-4">
							<input type="password" id="password" name="pass" class="form-control" placeholder="请输入密码">
						</div>
						<!-- <div class="col-md-4">
							<span id="password_msg" class="text-danger lineheight">密码必须大于6位</span>
						</div> -->
					</div>
					<div class="form-group">
						<label class="col-md-4 control-label">重复密码</label>
						<div class="col-md-4">
							<input type="password" id="repassword" name="repass" class="form-control" placeholder="请再次输入密码">
						</div>
						<!-- <div class="col-md-4">
							<span id="repassword_msg" class="text-danger lineheight">两次密码必须一致</span>
						</div> -->
					</div>
					<div class="form-group">
						<label class="col-md-4 control-label">性别</label>
						<div class="col-md-4">
							<label class="radio-inline"><input type="radio" name="gender" value="male">男</label>
							<label class="radio-inline"><input type="radio" name="gender" value="female">女</label>
						</div>
						<div class="col-md-4"></div>
					</div>
					<div class="form-group">
						<label class="col-md-4 control-label">联系电话</label>
						<div class="col-md-4">
							<input type="text" class="form-control" id="phone" name="phone" placeholder="请输入电话">
						</div>
						<div class="col-md-4"></div>
					</div>
					<div class="form-group">
						<label class="col-md-4 control-label">个人介绍</label>
						<div class="col-md-4">
							<textarea class="form-control" id="introduce" name="introduce"></textarea>
						</div>
						<div class="col-md-4"></div>
					</div>
					<hr style="border:1px dashed gray;">
					<div class="col-md-12 text-center">
						<input type="submit" value="同意并提交" class="btn btn-success" onclick="return checkForm()">
					</div>
				</form>
			</div>
		</div>
		<!--错误-->
		<c:if test="${!empty errorMsg}">
			<!-- 可关闭的警告框 -->
			<div class="text-center alert alert-danger alert-dismissible">
				<button type="button" class="close" data-dismiss="alert" aria-label="close">
					<span aria-hidden="true">×</span>
				</button>
				<strong>错误!</strong>${errorMsg }
			</div>
		</c:if>
		<!--如果用户已经登录,则点击我的账户和新用户注册,跳转页面时钟是用户主页面-->
		<c:if test="${!empty user}">
			<jsp:forward page="/foreground/user/user.jsp"></jsp:forward>
		</c:if>
	</body>
	<!-- <script type="text/javascript">
		//是否为空
		function ifnull(txt){
			if(txt.length==0){
  				return true;
  			}
			var $reg=/\s+/;
  			return $reg.test(txt);
		} 
		//在id为email的元素失去焦点时进行邮箱的验证
		$("#email").blur(function(){
			if(ifnull($(this).val())){
				$("#email_msg").html("邮箱不能为空");
			}else{
				var $reg=/^[a-zA-Z1-9]\w{1,}@[a-zA-Z1-9]{2,}(\.(com|cn|net)){1,2}$/;
				if(!$reg.test($("#email").val())){
					$("#email_msg").html("邮箱格式错误!");
				}else{
					$("#email_msg").attr("class","text-success glyphicon glyphicon-ok");
					$("#email_msg").html("");
				}
			}
		});
		//在id为username的元素失去焦点时进行用户名的验证
		$("#username").blur(function(){
			if(ifnull($(this).val())){
				$("#username_msg").html("用户名不能为空");
			}else{
				var $reg=/^\w{6,}$/;
				if(!$reg.test($("#username").val())){
					$("#username_msg").html("用户名至少要6位哦");
				}else{
					$("#username_msg").attr("class","text-success glyphicon glyphicon-ok");
					$("#username_msg").html("");
				}
			}
		});
		//在id为password的元素失去焦点时进行密码的验证
		$("#password").blur(function(){
			if(ifnull($(this).val())){
				$("#password_msg").html("用户名不能为空");
			}else{
				var $reg=/^\w{6,}$/;
				if(!$reg.test($("#password").val())){
					$("#password_msg").html("密码至少要6位哦");
				}else{
					$("#password_msg").attr("class","text-success glyphicon glyphicon-ok");
					$("#password_msg").html("");
				}
			}
		});
		//在id为repassword的元素失去焦点时进行密码的验证
		$("#repassword").blur(function(){
			if(ifnull($(this).val())){
				$("#repassword_msg").html("请确认密码");
			}else{
				if($("#password").val()!=$("#repassword").val()){
  					$("#repassword_msg").html("两次密码不一致");
				}else{
					$("#repassword_msg").attr("class","text-success glyphicon glyphicon-ok");
					$("#repassword_msg").html("");
				}
			}
		});
		
		//验证表单
		function checkForm(){
			//验证邮箱
			if(ifnull($("#email").val())){
				$("#email_msg").html("邮箱不能为空!");
				return false;
			}else{
				var $reg=/^[a-zA-Z1-9]\w{1,}@[a-zA-Z1-9]{2,}(\.(com|cn|net)){1,2}$/;
				if(!$reg.test($("#email").val())){
					$("#email_msg").html("邮箱格式错误!");
					return false;
				}
			}
			//验证用户名
			if(ifnull($("#username").val())){
				$("#username_msg").html("用户名不能为空!");
				return false;
			}else{
				var $reg=/^\w{6,}$/;
				if(!$reg.test($("#username").val())){
					$("#username_msg").html("用户名至少6位");
					return false;
				}
			}
			//验证密码
			if(ifnull($("#password").val())){
				$("#password_msg").html("密码不能为空");
				return false;
			}else{
				var $reg=/^\w{6,}$/;
				if(!$reg.test($("#password").val())){
					$("#password_msg").html("密码至少6位");
					return false;
				}
			}
			//确认密码是否为空
			if(ifnull($("#repassword").val())){
				$("#repassword_msg").html("请确认密码");
				return false;
			}
  			//验证两次密码是否一致
  			if($("#password").val()!=$("#repassword").val()){
  				$("#repassword_msg").html("两次密码不一致");
  				return false;
  			}
			return true;
		}
	</script> -->
</html>


3.register.js源码

$(function () {
        $('form').bootstrapValidator({
           message: 'This value is not valid',
	        feedbackIcons:{
	        	valid:'glyphicon glyphicon-ok',
	        	invalid:'glyphicon glyphicon-remove',
	        	validating:'glyphicon glyphicon-refresh'
	        },
            fields: {
                email: {
                    validators: {
                        notEmpty: {
                            message: '邮箱不能为空'
                        },
                        regexp: {
                        	regexp: /^[a-zA-Z1-9]\w{1,}@[a-zA-Z1-9]{2,}(\.(com|cn|net)){1,2}$/,
                            message: '邮箱地址格式有误'
                        },
                        threshold: 5,//有5个字符才发送Ajax请求
                        remote: {//发送Ajax请求到 
                        	type: 'post',
                        	url: '/mybookstore/AjaxCheckEmailServlet',
                        	message: '此邮箱已被注册',
                        	/*delay: 1000 //每1秒钟发送一次Ajax请求
*/                        }
                    }
                },
                name: {
                    validators: {
                        notEmpty: {
                            message: '用户名不能为空'
                        },
                        stringLength: {
                            min: 6,
                            max: 18,
                            message: '用户名长度必须在6到18位之间'
                        },
                        regexp: {
                            regexp: /^\w+$/,
                            message: '用户名只能包含大写、小写、数字和下划线'
                        },
                        threshold: 6,//有6个字符才发送Ajax请求
                        remote: {
                        	type: 'post',
                        	url: '/mybookstore/AjaxCheckNameServlet',
                        	message: '此用户名已被注册',
                        }
                    }
                },
                pass: {
                    validators: {
                        notEmpty: {
                            message: '密码不能为空'
                        },
                        stringLength: {
                            min: 6,
                            max: 18,
                            message: '密码长度必须在6到18位之间'
                        },
                        regexp: {
                            regexp: /^[a-zA-Z0-9_]+$/,
                            message: '用户名只能包含大写、小写、数字和下划线'
                        }
                    }
                },
                repass: {
                    validators: {
                        notEmpty: {
                            message: '密码不能为空'
                        },
                        regexp: {
                            regexp: /^[a-zA-Z0-9_]+$/,
                            message: '用户名只能包含大写、小写、数字和下划线'
                        },
                        identical: {
							field: 'pass',
							message: '*两次输入密码不一致'
						}
                    }
                },
                phone :{
                	validators: {
                		notEmpty: {
                            message: '电话不能为空'
                        },
                        regexp: {
                            regexp: /^1[0-9]{10}$/,
                            message: '电话格式不正确'
                        }
                    }
                }
            }
        }).on("success.form.bv",function(e){
			alert("注册成功!");
		});
    });

4.AjaxCheckEmailServlet.java,实现验证邮箱是否存在

package com.chinasoft.servlet;

import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

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 com.chinasoft.dao.impl.ImplUserDao;

import net.sf.json.JSONObject;

/**
 * @author jf
 * 功能:处理ajax的email实时验证功能,返回一个json数据
 */
@WebServlet("/AjaxCheckEmailServlet")
public class AjaxCheckEmailServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public AjaxCheckEmailServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置编码格式
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//邮箱
		String email = request.getParameter("email");
		//创建一个对象
		ImplUserDao userEmail = new ImplUserDao();
		try {
			//查询邮箱是否在数据库存在
			Boolean isFind = userEmail.findUserByEmail(email);
			Map<String,Boolean> map = new HashMap<>();
	    	if(isFind){
				map.put("valid", false);
				String result = JSONObject.fromObject(map).toString();
				response.getWriter().write(result);
			}else{
				map.put("valid", true);
				String result = JSONObject.fromObject(map).toString();
				response.getWriter().write(result);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

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

}


5.AjaxCheckNameServlet.java,实现验证用户名是否存在

package com.chinasoft.servlet;

import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

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 com.chinasoft.dao.impl.ImplUserDao;

import net.sf.json.JSONObject;

/**
 * @author jf
 * 功能:处理ajax的name实时验证功能,返回一个json数据
 */
@WebServlet("/AjaxCheckNameServlet")
public class AjaxCheckNameServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public AjaxCheckNameServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置编码格式
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//用户名
		String name = request.getParameter("name");
		//创建一个对象
		ImplUserDao userName = new ImplUserDao();
		try {
			//查询用户名是否在数据库存在
			Boolean isFind = userName.findUserByName(name);
			Map<String,Boolean> map = new HashMap<>();
	    	if(isFind){
				map.put("valid", false);
				//将map中的数据转成JOSN格式的数据
				String result = JSONObject.fromObject(map).toString();
				//返回JSON格式的数据
				response.getWriter().write(result);
			}else{
				map.put("valid", true);
				String result = JSONObject.fromObject(map).toString();
				response.getWriter().write(result);
			}		
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

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

}

6.RegisterServlet.java,注册功能实现

package com.chinasoft.servlet;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
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;

import org.apache.commons.beanutils.BeanUtils;

import com.chinasoft.dao.impl.ImplUserDao;
import com.chinasoft.entity.User;


/**
 * @author jf
 * 功能:实现用户登录功能
 * 		1.获取用户输入的各项注册数据,用beanutils进行快速赋值
 * 		2.将数据插入数据库
 * 		3.成功的话页面跳转到登陆页面,失败的话报错并且重新跳转到注册页面
 */
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		User user = new User();
		//1.获取请求体
		try {
			BeanUtils.populate(user, request.getParameterMap());
		} catch (IllegalAccessException e1) {
			e1.printStackTrace();
		} catch (InvocationTargetException e1) {
			e1.printStackTrace();
		}
		//2.插入数据库
		ImplUserDao ImpluserDao = new ImplUserDao();
		try {
			ImpluserDao.addUser(user);
			//3.注册成功,跳转登录页面
			request.getRequestDispatcher("/foreground/login/login.jsp").forward(request, response);
		} catch (SQLException e) {
			//注册失败
			request.setAttribute("errorMag", e.getMessage());
			request.getRequestDispatcher("/foreground/login/register.jsp");
			e.printStackTrace();
		}
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值