黑马旅游网-注册用户(二)

目录

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

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());}
}

四、测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22462.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马旅游网-旅游分类线路分页显示(七)

目录 一、先查旅游分类所有内容 二、查询分页数据 三、实现后端代码 RouteServlet RouteServiceImpl​​​​​​​ RouteService RouteDaoImpl RouteDao PageBean 四、分页与数据展示 修改route_list.html 修改header.html 五、测试 一、先查旅游分类所有内容 点…

ChatGPT最有实力的竞争对手Claude也开放API申请了

申请地址&#xff1a;https://www.anthropic.com/product 或者点击“阅读原文 ”直接申请

ChatGPT与低代码平台谁更适合快速开发

近来&#xff0c;关于生成式AI技术即将颠覆各个行业的预测在网络上随处可见。虽然生成式AI技术在自然语言处理、文本生成等领域已经取得了令人瞩目的成果&#xff0c;但是在低代码平台开发领域&#xff0c;尤其是在企业内部应用方面&#xff0c;其影响并不明显。 低代码平台作…

我曾做过陈士成,也做过孔乙己,还做过阿Q

一、 我现在是陈士成&#xff0c;陈士成现在是我。为什么这么说呢&#xff1f; 那年那天&#xff0c;天刚微微亮&#xff0c;似乎还在打着哈欠。我和父亲去得很早&#xff0c;为的就是在“小升初的考试成绩榜单”前面占一个有利的位置。我不记得当时穿的厚还是不厚&#xff0c;…

码农版孔乙己

改变自己 也许有一天你能改变这个世界&#xff0c;但是请在改变世界之前&#xff0c;先让自己存活下来&#xff0c;看到一篇文章分享一下不知道你们能从中看出什么呢 听人家背地里谈论&#xff0c;孔乙己原来也读过研&#xff0c;但终于没有实习经历&#xff0c;又没关系内推&a…

浅谈“孔乙己的长衫“是脱不下来还是难脱下?

名人说&#xff1a;往者不可谏&#xff0c;来者犹可追。——《论语微子篇》 创作者&#xff1a;Code_流苏(CSDN) ★温馨提示&#xff1a;以下仅代表个人观点&#xff0c;不代表其它任何人看法。 目录 〇、缘由一、社会对于学历和职业之间的关系认知是怎样的&#xff1f;二、学历…

Unity 蒙皮动画 SkinnedMesh 使用GPU Instance

GPU Instance合批技术是不支持 SkinnedMeshRender的&#xff0c;不过可以转换为Mesh Render以支持GPU Instance. 0x00 前言 我想很多开发游戏的小伙伴都希望自己的场景内能渲染越多物体越好&#xff0c;甚至是能同时渲染成千上万个有自己动作的游戏角色就更好了。 但不幸的是…

Unity毛发系统TressFX Exporter

Unity 数字人交流群&#xff1a;296041238 一&#xff1a;在Maya下的TressFX Exporter 插件安装步骤&#xff1a; 1. 下载Maya的TressFX Exporter插件 下载地址&#xff1a;TressFX Exporter 链接&#xff1a;https://github.com/Unity-China/cn.unity.hairfx.core/tree/m…

vscode配置go开发环境,插件超时问题解决

今天想试下golang&#xff0c;用goland太贵所以打算配置vscode来试一试&#xff0c;但是发现许多插件安装超时&#xff0c;查阅资料说是配置一下环境变量开启代理就好&#xff0c; go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.io,direct 但是尝试后发现依然没…

解决IDEA插件安装慢、超时、不成功问题

解决IDEA插件安装慢、超时、不成功问题 1.修改本地hosts文件&#xff0c;打开文件位置&#xff1a; Windows 系统 Hosts 文件路径&#xff1a;C:\Windows\System32\drivers\etc\hosts 用工具打开hosts文件 2.打开国内插件的节点IP地址 http://tool.chinaz.com/speedtest/pl…

chatgpt赋能python:Python如何突破VIP限制

Python如何突破VIP限制 在这个数字内容时代&#xff0c;我们经常使用各种网站和应用程序来获取视频、音乐、软件等数字资源。但是&#xff0c;某些资源可能受到VIP限制&#xff0c;这意味着我们需要付费才能获得完整的访问权限。但是&#xff0c;如果你了解Python编程&#xf…

武汉总部裁掉九成35岁以上员工?小米最新回应→

上一篇&#xff1a;00后太猛了&#xff0c;正强势整顿职场 导读&#xff1a;小米方面表示&#xff0c;在社交媒体平台上陆续出现有关小米武汉总部35岁以上员工只保留10%的信息&#xff0c;经查皆为谣言。 5月14日&#xff0c;微博端有消息称小米武汉总部正式裁掉90% 35岁以上员…

来上海一个月的记录、思考和感悟

作者 | gongyouliu 编辑 | gongyouliu 从4月3号早上来上海&#xff0c;到今天差不多整整一个月了&#xff0c;也是自己正式从杭州离职创业&#xff08;我更愿意称之为自由职业者&#xff0c;毕竟我没有招聘全职员工&#xff0c;有两个朋友业余时间在帮我&#xff09;的第一个月…

Prompt learning 教学[案例篇]:文生文案例设定汇总,你可以扮演任意角色进行专业分析

Prompt learning 教学[案例篇]&#xff1a;文生文案例设定汇总&#xff0c;你可以扮演任意角色进行专业分析 1.角色扮演 行为Prompt写法“牙医”““我想让你扮演一名牙医。我会向你提供有关寻找牙科服务&#xff08;例如 X 光、清洁和其他治疗&#xff09;的个人的详细信息。…

桌面管理,Windows自带工具!很强!

这两天看到自己桌面上的快捷方式图标越来越多&#xff0c;真是折磨&#xff0c;有时候找个软件找半天&#xff08;悄悄bb一句&#xff0c;主要是挡住我的壁纸了&#xff09;&#xff0c;真的是很令人难受&#xff01;就想着整理一下桌面&#xff0c;如下是用windows自带的工具整…

基于GMap.NET库实现的Windows桌面地图工具软件分享

0 前言 由于工作中经常和地图、GPS坐标转换、GPS轨迹查看等内容相关&#xff0c;经常要借助一些在线网站和工具来查看地图和位置等&#xff0c;在一次偶然的机会中了解到一个GMap.NET开源的桌面地图库和基于GMap.NET实现的MapDownloader地图下载工具&#xff0c;于是也想实现一…

小伙用AI“复活”奶奶引争议 科技边界在哪里(图)

小伙用AI“复活”奶奶引争议 科技边界在哪里(图) 上海00后用AI“复活”奶奶引发巨大争议&#xff1a;科技的边界在哪里。(图片来源&#xff1a;视频截图) 上海00后小伙用AI“复活”奶奶&#xff0c;还原其生前的音容笑貌&#xff0c;却引发巨大争议&#xff0c;人们在思考&…

音视频技术开发周刊 | 300

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 著名数据和AI企业Databricks&#xff0c;收购类ChatGPT开源平台MosaicML 6月27日&#xff0c;Databricks在官网宣布&#xff0c;以13亿美元&#xff08;约94亿元&#xff…

比GPT-4 Office还炸裂!阿里版GPT全家桶来袭

Datawhale干货 发布&#xff1a;阿里巴巴&#xff0c;来源&#xff1a;新智元 【导读】通义千问一出世&#xff0c;阿里版GPT全家桶立马来了。草图秒变程序&#xff0c;开会还能摸鱼&#xff0c;会议记录邮件文案全整活&#xff01;这只是开始&#xff0c;工作和生活将全面进入…

大咖齐聚CCIG论坛——文档图像智能分析的产业前沿

目录 1 文档图像智能分析技术2 大咖齐聚CCIG20233 议题介绍3.1 从模式识别到类脑研究3.2 视觉-语言预训练模型演进及应用3.3 篡改文本图像的生成和检测3.4 智能文档处理在工业界的应用与挑战 4 观看入口&议程 1 文档图像智能分析技术 文档图像智能分析是指使用计算机视觉和…