Java项目实战第4天:注册功能的实现 清疚 2023-03-03 05:58 2阅读 0赞 ### 目录 ### * * * * 一、前端发送注册请求 * 二、Servlet优化 * 三、注册业务完善 * 最后 ### ### 今天是刘小爱自学Java的第103天。 感谢你的观看,谢谢你。 话不多说,开始今天的学习: ![format_png][] 这几天时间主要是学习和注册页面相关的业务: 包括前端校验数据的合法性和完整性,后台校验数据的唯一性。 以及今天要学习的注册功能,此外还有邮箱激活业务的实现,这块不知道还有没有时间去学习。 ## 一、前端发送注册请求 ## 根据校验结果判断是否将数据提交: ![format_png 1][] **①提交事件** 在注册页面form表单中,有一个提交按钮,也就是说该按钮一被点击就会触发提交事件。 jQuery中使用submit()方法来绑定该事件,一旦registerForm中出现提交就会触发方法里的内容。 使用console.log()可以作为一个检测。 **②默认不提交** 本来默认是会将form表单中的数据提交,但是为了节省资源,在前端校验和后台校验成功后才提交请求。 所以使用return false,将表单设置成默认情况下不提交。 **③将表单数据序列化** 因为注册业务需要将整个表单的数据都提交,如果使用键值对的方式提交数据,太繁琐了。 所以使用jQuery中的serialize()方法,将表单数据序列化。 **④提交请求** 在提交前做一个判断,也就是昨天做的邮箱唯一性校验。 ![format_png 2][] 如果邮箱后台校验已注册,不提交请求。 如果邮箱后台校验未注册,提交请求。 否则邮箱校验没啥意义,只是在页面提醒了用户,但照样还是能够提交数据到后台。 ## 二、Servlet优化 ## 以前编写代码时,是一个请求对应一个Servlet: * 邮箱校验请求对应CheckEmailServlet * 注册请求对应RegisterServlet 但是事实上Servlet应该以模块划分,比如UserServlet对应的是和用户相关的模块。 那么无论是邮箱校验请求还是注册请求,甚至是登录请求对应的都是UserSerlet的。 如何让一个Servlet对应多个请求? ![format_png 3][] 在url路径后面拼接一个methodName来区分不同的请求。 这样的话,不同的请求可以对应同一个Servlet了。 那么Servet中的代码如何编写?一步一步来编写并优化: **1UserServlet** ![format_png 4][] 凡是路径为userServlet的请求都由该Servlet接受。 获取请求中的参数“methodName”对应的值,根据其值不同来实现不同的业务。 当然上述具体的业务还没有编写,先写一个输出语句用来判断请求是否接收成功。 将具体的业务封装在一个方法中,然后在if条件语句中直接调用对应的方法就好了。 封装一个校验邮件唯一性的方法,命名为checkEamil(),代码编写如下: ![format_png 5][] 具体的代码编写逻辑昨天详解过,不再赘述。 这样的好处在于:一个方法对应一个请求业务,一目了然。 但是其又有一个问题: 如果userServlet接收的请求有很多个,对应很多个else if,这个是极其不合适的。 为了解决这个问题,就需要使用到反射。 **2UserServlet优化之BaseServlet** 这一块比较难理解,弄了好久才弄明白: 创建一个类BaseServlet,继承HttpServlet类,将doPost方法和doget方法封装在这个类中,再让UserServlet继承BaseServlet。 这样做的好处在于: BaseServlet中专门用来处理请求。 UserServlet中专门用来处理具体的业务。 回顾一下反射的知识点,这块我在第51天仔细讲解过。 ![format_png 6][] **①获取方法对象** this是指谁调用我就是谁,这里是谁调用了doGet方法? 是UserServlet对象,为什么是它,后面有图片分析,此处着重讲下反射。 getClass:获取UserServlet的Class对象。 getDeclaredMethod:获取UserServlet中的方法,其有3个参数: * methodName:对应的方法名,也就是请求路径中携带的参数。 * 后面两个参数为该方法对应参数的Class对象,也就是请求和响应。 为什么要有后面两个参数? 因为方法可以重载的,同名的方法可能会有好几个,需要使用参数来确定对应的是哪一个方法。 **②invoke方法** method.invoke(this,request,response) 这个就相当于method调用了它自己。 method是谁?是根据前端提交的请求路径中的methodName来确定的。 所以该方法执行的就是this(也就是UserServlet中的)方法,具体是那个需要看前端提交的请求路径。 **为了方便理解,画一个流程图:** ![format_png 7][] /userServlet?methodName=register 因为是get请求,所以该请求路径下,UserServlet会接受该请求,并执行doGet方法。 但是它自己没有doGet方法了,所以就会去它的父类BaseServlet中找对应的请求方法。 所以此时②中的this指的就是UserServlet。 ②中获取请求路径中的methodName,这里是checkEmail,所以会执行UserServlet中的checkEmail。 最后在UserServlet实现具体的业务处理。 ## 三、注册业务完善 ## 也就是经典的三层代码编写。 **1web层代码编写** ![format_png 8][] **①BeanUtils.populate()** 前端页面数据、数据库中的数据在Java中都可以对应成一个类。 注册页面用户提交的数据是有很多,使用getParamterMap方法可以将这些数据以map的形式获取。 而BeanUtils.populate()就是将map转换成一个JavaBean,上述例子中就是User这个类。 **②Service层注册方法** 返回值类型为boolean: 如果为true:注册成功;如果为false:注册失败。 如果有异常的话,返回false并提示信息。 将这些数据存放在一个map中,后面转换成一个json数据响应给前端。 **2service层** ![format_png 9][] **①密码加密处理** 使用Md5Util可以将密码加密,不然的话不安全,用户的密码很容易就被知道了。 加密之后,再将其存到user对象中。 **②设置激活状态为0** 这个是和邮件激活业务相对应的,我们很多时候去注册一个网站,经常都需要在邮箱中激活一下。 若为0表示还未在邮箱中激活,激活了就将对应用户的该属性设置成1。 **③生成激活码** 这里使用的是UUID,尽可能保证激活码的唯一性,也是和邮箱业务相对应的。 **3dao层** ![format_png 10][] 使用jdbcTemplate的update方法即可插入数据。 基本的一个插入方法,就是数据表字段很多,所以需要一个个地从user对象中获取。 ## 最后 ## 谢谢你的观看。 如果可以的话,麻烦帮忙点个赞,谢谢你。 [format_png]: /images/20230208/02f10b0073ef4c9d8e85c32bbbda71d5.png [format_png 1]: /images/20230208/f9aa4d7d0a284c65829b8cab63369d30.png [format_png 2]: /images/20230208/9f734d9e961b4fe9bda025ff8b051d94.png [format_png 3]: /images/20230208/fc62cc9d4a194e92827eb5d7b56d9c24.png [format_png 4]: /images/20230208/7465a349dc1a4dec9e9a803085c3e6b5.png [format_png 5]: /images/20230208/fc43d0b20f40485f9ec620a4d8cf58bc.png [format_png 6]: /images/20230208/78389cb028064db6acce1470baffafe0.png [format_png 7]: /images/20230208/80802d093b1344cc9eb6c8e9b33fdc20.png [format_png 8]: /images/20230208/46ab047dfd4f47fea0989f892e4c8327.png [format_png 9]: /images/20230208/9a34c1818e5c45f8a2e71970019d81ee.png [format_png 10]: /images/20230208/a7cb676c472e4cc8baff49f60e5de383.png
相关 平台注册功能实战 这里写目录标题 一、注册功能流程 二、前端实现 1、创建RegisterView.vue文件 2、注册路由 3、js代 以你之姓@/ 2024年03月16日 13:22/ 0 赞/ 53 阅读
相关 Java项目实战第8天:分页查询功能 今天是刘小爱自学Java的第107天。 感谢你的观看,谢谢你。 话不多说,开始今天的学习: ![format_png][] 一、分页概述 我们现在在网络上查询数 你的名字/ 2023年03月06日 03:19/ 0 赞/ 8 阅读
相关 Java项目实战第7天:导航栏业务的实现 目录 一、代码编写 二、前端渲染 最后 今天是刘小爱自学Java的第106天。 感谢你的观看,谢 布满荆棘的人生/ 2023年03月04日 09:27/ 0 赞/ 13 阅读
相关 Java项目实战第5天:邮箱激活业务 目录 一、Java发送邮箱 二、发送邮件及测试 三、邮箱激活业务实现 最后 今天是刘 刺骨的言语ヽ痛彻心扉/ 2023年03月03日 11:25/ 0 赞/ 171 阅读
相关 微服务项目第18天:实现图片上传功能 目录 一、创建upload微服务 二、后台代码编写 三、图片域名及测试 最后 今天是 左手的ㄟ右手/ 2022年12月04日 15:56/ 0 赞/ 176 阅读
相关 Java项目实战第12天:页面详情的实现 目录 一、业务分析 二、后台代码编写 三、前端页面解析 最后 今天是刘小爱自学Jav 迷南。/ 2022年11月25日 00:45/ 0 赞/ 226 阅读
相关 Java项目实战第11天:搜索功能的实现 目录 一、sql语句动态拼接 二、前后台代码编写 三、搜索框数据回填 最后 今天是刘 ╰半橙微兮°/ 2022年11月24日 12:58/ 0 赞/ 210 阅读
相关 第6章 用户注册功能实现 > 慕课网《[强力django+杀手级xadmin 打造上线标准的在线教育平台][django_xadmin]》 学习笔记 -------------------- 本章主 柔情只为你懂/ 2022年06月15日 10:19/ 0 赞/ 251 阅读
相关 实习第4天 今天是无感的一天,本以为只是已经完成了Jenkins的搭建阶段,谁知道突然间自己的任务又多了起来,要完成引擎在所有平台的自动化编译,这是一个很海量的工作,要写大量的脚本 短命女/ 2022年06月10日 13:13/ 0 赞/ 213 阅读
还没有评论,来说两句吧...