目录

一、注册用户-业务流程分析

1.页面效果

2.业务流程分析

二、注册用户-前端功能实现

修改register.html

1.校验用户名

2.校验密码

3.检验邮箱

4.使用ajax提交数据

5.完整代码参考

三、注册用户-后端功能实现

创建​​​​​​​RegisterUserServlet

创建UserService

创建UserServiceImpl

创建UserDao

创建UserDaoImpl

四、测试


一、注册用户-业务流程分析

1.页面效果

2.业务流程分析

二、注册用户-前端功能实现

修改register.html

1.校验用户名

获取用户名

用户名格式要求,正则表达式限制

进行判断用户名是否符合

用户名合法无提示

用户名不合法,红色边框提示

2.校验密码

获取密码

密码格式要求,正则表达式限制

进行判断密码是否符合

密码合法无提示

密码不合法,红色边框提示

3.检验邮箱

获取邮箱

邮箱格式要求,正则表达式限制,注意邮箱格式

进行判断邮箱是否符合

合法无提示

不合法,红色边框提示

4.使用ajax提交数据

在此使用异步提交表单是为了获取服务器响应的数据。因为我们前台使用的是html作为视图层,不能够直接从servlet相关的域对象获取值,只能通过ajax获取响应数据

5.完整代码参考

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title>注册</title><link rel="stylesheet" type="text/css" href="css/common.css"><link rel="stylesheet" href="css/register.css"><!--导入jquery--><script src="js/jquery-3.3.1.js"></script><script>//校验用户名function checkUsername(){//获取用户名var username = $("#username").val();//用户名 8~32位var reg_username = /^\w{8,32}$/;//判断var flag = reg_username.test(username);if(flag){//用户名合法$("#username").css("border","");}else{//用户名不合法,红色边框$("#username").css("border","1px solid red");}return flag;}//校验密码function checkPassword(){//获取用户名var password = $("#password").val();//用户名 8~20位var reg_password = /^\w{8,20}$/;//判断var flag = reg_password.test(password);if(flag){//用户名合法$("#password").css("border","");}else{//用户名不合法,红色边框$("#password").css("border","1px solid red");}return flag;}//校验邮箱function checkEmail(){//获取用户名var email = $("#email").val();//用户名 8~20位var reg_email = /^\w+@\w+.\w+$/;//判断var flag = reg_email.test(email);if(flag){//用户名合法$("#email").css("border","");}else{//用户名不合法,红色边框$("#email").css("border","1px solid red");}return flag;}//使用ajax提交数据$(function (){$("#registerForm").submit(function (){//表单的校验if(checkUsername() && checkPassword() && checkEmail()){//表单数据合法 username=xxx&passwrod=xxx$.post("registerUserServlet",$(this).serialize(),function (data){//设计返回数据格式 data : {flag:true,errorMsg:"提示错误信息"}if (data.flag){//注册成功location.href="register_ok.html";//跳转到首页}else {$("#msg").html(data.errorMsg);}});};//表单较验失败return false;});//用户体验提升$("#username").blur(checkUsername);$("#password").blur(checkPassword);$("#email").blur(checkEmail);});</script></head><body><!--引入头部--><div id="header"></div><!-- 头部 end --><div class="rg_layout"><div class="rg_form clearfix"><div class="rg_form_left"><p>新用户注册</p><p>USER REGISTER</p></div><div class="rg_form_center"><!--注册表单--><form id="registerForm"><!--提交处理请求的标识符--><input type="hidden" name="action" value="register"><table style="margin-top: 25px;"><tr><td class="td_left"><label for="username">用户名</label></td><td class="td_right"><input type="text" id="username" name="username" placeholder="请输入账号"></td></tr><tr><td class="td_left"><label for="password">密码</label></td><td class="td_right"><input type="text" id="password" name="password" placeholder="请输入密码"></td></tr><tr><td class="td_left"><label for="email">Email</label></td><td class="td_right"><input type="text" id="email" name="email" placeholder="请输入Email"></td></tr><tr><td class="td_left"><label for="name">姓名</label></td><td class="td_right"><input type="text" id="name" name="name" placeholder="请输入真实姓名"></td></tr><tr><td class="td_left"><label for="telephone">手机号</label></td><td class="td_right"><input type="text" id="telephone" name="telephone" placeholder="请输入您的手机号"></td></tr><tr><td class="td_left"><label for="sex">性别</label></td><td class="td_right gender"><input type="radio" id="sex" name="sex" value="男" checked> 男<input type="radio" name="sex" value="女"> 女</td></tr><tr><td class="td_left"><label for="birthday">出生日期</label></td><td class="td_right"><input type="date" id="birthday" name="birthday" placeholder="年/月/日"></td></tr><tr><td class="td_left"><label for="check">验证码</label></td><td class="td_right check"><input type="text" id="check" name="check" class="check"><img src="checkCode" height="32px" alt="" onclick="changeCheckCode(this)"><script type="text/javascript">//图片点击事件function changeCheckCode(img) {img.src="checkCode?"+new Date().getTime();}</script></td></tr><tr><td class="td_left"> </td><td class="td_right check"> <input type="submit" class="submit" value="注册"><span id="msg" style="color: red;"></span></td></tr></table></form></div><div class="rg_form_right"><p>已有账号?<a href="#">立即登录</a></p></div></div></div><!--引入尾部--><div id="footer"></div><!--导入布局js,共享header和footer--><script type="text/javascript" src="js/include.js"></script></body>
</html>

三、注册用户-后端功能实现

创建​​​​​​​​​​​​​​RegisterUserServlet

1.从session中获取验证码

2.删除session

3.验证码有误 封装返回的数据对象

4.注册失败,设置编码和类型

5.获取所有表单的数据、

6.封装user对象

7.调用service

8.验证码有误 封装返回的数据对象

9.注册用户成功

10.注册用户失败

11.设置编码和类型

package com.hotdas.travel.web.servlet;import com.fasterxml.jackson.databind.ObjectMapper;
import com.hotdas.travel.domain.ResultInfo;
import com.hotdas.travel.domain.User;
import com.hotdas.travel.service.UserService;
import com.hotdas.travel.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;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.lang.reflect.InvocationTargetException;
import java.util.Map;/*** @program: IntelliJ IDEA* @description: * @author: * @create: 2022-10-01 22:04*/
@WebServlet("/registerUserServlet")
public class RegisterUserServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String check = request.getParameter("check");//从session中获取验证码String checkcode_server = (String) request.getSession().getAttribute("CHECKCODE_SERVER");//删除sessionrequest.getSession().removeAttribute("CHECKCODE_SERVER");if (checkcode_server!=null && !checkcode_server.equalsIgnoreCase(check)){//验证码有误 封装返回的数据对象ResultInfo info = new ResultInfo();//注册失败info.setErrorMsg("验证码有误!");info.setFlag(false);ObjectMapper objectMapper = new ObjectMapper();String valueAsString = objectMapper.writeValueAsString(info);//设置编码和类型response.setCharacterEncoding("utf-8");response.setContentType("application/json;charset=utf-8");response.getWriter().write(valueAsString);return;}//获取所有表单的数据Map<String, String[]> parameterMap = request.getParameterMap();//封装user对象User user = new User();try {BeanUtils.populate(user,parameterMap);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//调用serviceUserService userService = new UserServiceImpl();Boolean flag =  userService.regirst(user);//验证码有误 封装返回的数据对象ResultInfo info = new ResultInfo();if (flag){//注册用户成功info.setFlag(true);}else{//注册用户失败//注册失败info.setErrorMsg("注册失败!");info.setFlag(false);}ObjectMapper objectMapper = new ObjectMapper();String valueAsString = objectMapper.writeValueAsString(info);//设置编码和类型response.setCharacterEncoding("utf-8");response.setContentType("application/json;charset=utf-8");response.getWriter().write(valueAsString);}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}}

创建UserService

package com.hotdas.travel.service;import com.hotdas.travel.domain.User;public interface UserService {Boolean regirst(User user);//实现方法
}

创建UserServiceImpl

1.从数据库中查询用户

2.判断用户是否存在

3.用户存在,返回false

4.激活邮箱才可以使用

5.保存信息到数据库

6.发送邮箱给用户让用户进激活,后面doing...

package com.hotdas.travel.service.impl;import com.hotdas.travel.dao.UserDao;
import com.hotdas.travel.dao.impl.UserDaoImpl;
import com.hotdas.travel.domain.User;
import com.hotdas.travel.service.UserService;
import com.hotdas.travel.util.UuidUtil;public class UserServiceImpl implements UserService {private UserDao userDao = new UserDaoImpl();@Overridepublic Boolean regirst(User user) {//从数据库中查询用户User u =   userDao.findByUsername(user.getUsername());//判断用户是否存在if (u!=null){//用户存在,返回falsereturn false;}//激活邮箱才可以使用user.setCode(UuidUtil.getUuid());user.setStatus("N");//保存信息到数据库userDao.save(user);//发送邮箱给用户让用户进激活,后面doing...return true;}
}

创建UserDao

1.根据用户名查询用户信息

2.保存用户信息

package com.hotdas.travel.dao;import com.hotdas.travel.domain.User;public interface UserDao {//根据用户名查询用户信息User findByUsername(String username);//保存用户信息void save(User user);}

创建UserDaoImpl

1.定义sql

2.用占位符替代数据

package com.hotdas.travel.dao.impl;import com.hotdas.travel.dao.UserDao;
import com.hotdas.travel.domain.User;
import com.hotdas.travel.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;public class UserDaoImpl implements UserDao {private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic User findByUsername(String username) {User user =null;try {//1.定义sqlString sql ="select * from tab_user where username=?";user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),username);} catch (DataAccessException e) {e.printStackTrace();}return user;}@Overridepublic void save(User user) {//1.定义sql,占位符String sql = "insert into tab_user(username,password,name,birthday,sex,telephone,email,status,code) values(?,?,?,?,?,?,?,?,?)";template.update(sql,user.getUsername(),user.getPassword(),user.getName(),user.getBirthday(),user.getSex(),user.getTelephone(),user.getEmail(),user.getStatus(),user.getCode());}
}

四、测试

运行项目,打开网页,数据不合法会出现红色框,以此检验代码是否有误

黑马旅游网-注册用户(二)相关推荐

  1. JavaWeb黑马旅游网-学习笔记02【注册功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  2. 黑马旅游网编写练习(1)--注册功能

    黑马旅游网编写练习 黑马旅游网是包含学习完java-web的一个综合项目:项目中既包含前端,也包含后端的逻辑处理.项目使用三级结构,并未使用框架技术. 本次项目使用maven管理.练习使用一些编写好的 ...

  3. 黑马旅游网编写练习(10)--用户收藏线路的展示功能

    黑马旅游网编写练习(10)–用户收藏线路的展示功能 分析 当用户点击我的收藏按钮时,需要将用户所收藏的所有线路进行展示:并且点击响应的线路,就会跳转到该线路对应的详情页面. 旅游线路的分页展示功能之前 ...

  4. JavaWeb黑马旅游网-学习笔记08【旅游线路详情】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  5. JavaWeb黑马旅游网-学习笔记10【项目代码】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  6. JavaWeb黑马旅游网-学习笔记09【旅游线路收藏】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  7. JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  8. JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  9. 黑马旅游网完整代码_JavaWeb+黑马旅游网

    JavaWeb+黑马旅游网 |____资料 |____16.黑马旅游网 |____15.Maven基础 |____14.Redis |____13.Ajax和JSON |____12.Jquery | ...

最新文章

  1. 在线作图|如何绘制一张三元相图
  2. 【根据网上其他没有解决】XAMPP报错Error: Apache shutdown unexpectedly
  3. java流与文件——读写二进制数据(DataOutput + DataInput)
  4. C#编写不安全代码初探
  5. 关于计算机网络的短文英语,英语翻译哪个心心好嘛!帮我用英语写一段关于计算机网络的100多个字的短文嘛!内容随便写!只要是关于计算机网络的!...
  6. java制作玩游戏并支付游戏币_java 学习第三天小练习
  7. logstash增量同步mysql数据到es
  8. 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。...
  9. CSS 魔法系列:纯 CSS 绘制各种图形《系列六》
  10. SPSS教程及常用操作参考表 —— 一篇文章解决对SPSS的所有疑问
  11. 第二单元 用python学习微积分(九)近似计算的应用和曲线构图
  12. Excel如何表格中一键生成柱表图
  13. S3C2410 通用异步收发UART 串口通信
  14. 应用matlab快速实现实验对象随机分组,应用MATLAB快速实现实验对象随机分组
  15. 台式计算机上的fn键是哪个,电脑键盘上Fn键到底有什么用?
  16. vt功能对计算机有影响吗,win7怎么开启vt模拟器?电脑开vt有什么坏处?
  17. 中国电信提前批(已offer)
  18. linux内网穿透(内外网服务器端口映射)
  19. 那些前端用js手搓出来的算法与数据结构(一)链表篇
  20. git -- git emoji列表(github commit 前面的小icon)

热门文章

  1. python 运行环境
  2. 帮你提升 Python 的 27 种编程语言
  3. Java Web 学习路线(2018)
  4. 微信小程序——数组操作 (增加删除修改遍历)map、filter、forEach、find的用法、二维数组,排序,求和、指定长度数组赋值
  5. 一秒看透本质的人,是如何思考的?
  6. THE ZOMBIES ATE YOUR BRAINS!
  7. UWB定位傲视厘米级精度领域
  8. 互联网上如何才能实现年入百万?
  9. *分享-神奇的MLE原因-为什么结构体开的内存不大却MLE?用数组开更大还能ac???
  10. 20210828每周分享(第二期)-中英文对照翻译插件、笔记软件