当前课程知识点:Web后端开发技术 > 第9章 某高校毕业生信息发布系统开发 > 9.3 系统实现 > 9.3.1完善登陆和注册功能
同学你好
今天我们学习这个知识点
本节首先给大家去演示
我们最后这个项目的登录和注册
我们还是基于我们之前讲过的项目
做更改
首先我chapter9的
project是在
我们上一个chapter8 project基础
之上复制而来的
那么我这里增加了一些内容
首先
我们之前讲过DBUtil
我放在了
com.hbun.until这个包下
因为我现在用的数据库叫做
chapter9
所以说我在连接的时候
把数据库改成chapter 9
我这里面定义了一个异常类
叫做 serviceException
用于在我们的服务层
抛出异常用的
这个类的实现很简单
就是用到我们超类的构造方法就可以了
然后我们对应的这些包
在我们之前设计的有我们的po包
跟我们数据库打交道的这些实体类
还有我们的dao和我们dao层交互的
以及我们的service
我们的服务层
那么首先我们先看我们的
student Dao
在student Dao里面
我实现了这样的一个方法
第1个方法叫做
getByName
也就是说我要根据我的用户名
当然这个用户名是指的登录的用户名
来获取我的一个student对象
我们sql语句就是
select*from student
where指定我的用户名是多少
然后我调用我们的DBUtil
把SQL还有我们的参数传进去
传进去以后就返回我的一个
ResultSet
如果我的ResultSet的
存在下一条记录
我们就依次从数据库里把我们的Id
name等等这些属性值拿出来
设置到我们 student
对象当中
然后把我们student对象返回
那么很显然如果这条记录没有查找出来
也就是说没有用户名的用户
我们最后就返回一个空值
这是这个方法
还有一个方法
我们在注册的时候会用
这里先给出来叫做studentReg
那么我需要传进两个参数
一个叫做name
一个叫做password
那我直接把name和password插入进去
插入到我们数据库里就可以了
那么这是我们的dao层和数据库操作
那么什么叫做业务层
大家看
首先我们先看注册这个方法
那么在我们的dao层注册
我是不管用户名存在不存在的
反正你给我用户名密码
我就往数据库里插
往数据库里插
面向的直接就是数据库
但是在我们的service层
我就不是这样了
首先我干嘛
我要根据我的用户名去查找
student的对象
我们dao层刚才写好这个方法
那么如果这个对象不等于空
也就是说用户已经存在了
对不起
我在我就要抛出一个异常
说我该用户已经存在
在我们的servlet上进行处理
就这个异常就可以了
这是我们自定义的一个
service异常
那么这个异常没有抛出
说明我用户才能正常插进去
那么调用studentReg
造成的方法
那么把我的用户名密码插进去
这是我们的注册这个业务
那么我们的登录业务同样也是
首先我根据我传递用户名查找一下
我用户存不存在
如果这个用户连都是空的话
说明它不存在
那么这个用户肯定就不能再让他
继续登录了
我就要抛出异常
那么如果这个用户存在
我还要验证一下用户的密码和他
传进来的密码是不是一致的
如果不一致
对不起
我就说你是密码错误
如果这两个错误都没发生
我就正常返回一个student对象
表示我登录成功了
好
那么接下来我们就要改造我们的
userservlet
也就是我们登录的处理逻辑
那么之前我们的处理逻辑这些
数据库的代码都写在我们servlet
当中了
很显然是不合适的
所以说现在我们把这个都删掉
首先在注册的时候
如果它当前调用的是我们的注册方法
那么首先要获取他的用户名
获取他的密码
我也不用再组sql语句了
我把这些全都删掉
那么在我们servlet当中
我们肯定要依赖于我们的
service层
也就我们java bean
我们这个bean叫做 studentService
好
我把 bean给它new出来
那么我直接就可以
如果是注册的话
我们有一个方法
叫做studentReg
把我们的获取到的
userName和我们的
password传进去
当然了
我们要对它进行try catch
因为它有可能注册不成功会
抛出一个异常
这个异常是我们自定义的
service异常
我们只是捕获
我们的自定义的
service exception
如果异常捕获到了
我们就要给他输
往request请求域里面输出
一个错误信息
错误信息就是我们异常里面
给我们的error信息
getMessage
说白了 也就是假如说我们注册的时候
这个用户已经存在了
我们获取的到的就是我们抛出的用户
已经存在的这样的一个异常
给放到我们请求域当中
然后这个异常如果发生了
那么我就要getRequest
dispatcher
我就要继续返回到我的注册页面
.forward
那么如果这个异常没有发生
也就是这句话
正常注册了
我们就可以怎么办
我们就可以
sendRedirect
我们这里进入到哪
我们可以redirect到我们的
首页
我们的首页之前也已经给大家写了
是我们的index的一个servlet
所以说这里我们可以通过
request.get
ContextPath
然后转向到我们的首页就是
indexServlet
就可以了
那么我们先尝试一下我们的注册页面
能不能成功
好
我先给他
没用的代码先删去
然后我们需要做一个小小的修改
就是注册页面如果出错了
我是不是要把我错误信息给拿出来
在这显示出来
所以说
我在这里用一个font
Color是red
我们这里给了一个request
scope.我们的error信息
servlet有一些错误是因为
我们login这块的错误
我们先把login这些代码都给他删去
因为我们待会儿这些代码也都用不到了
所有跟数据库这些代码都删去
待会我们再来改造login这个方法
我重启一下我的服务
刷新一下
注册jjq
123
123
点击注册
好
就回到我们的首页了
我们看一下数据库
因为我们首页还没有从数据库里
读数据
所以说看不出效果来
我们看我们的student已经有
一个jjq123了
那么假如说我现在继续注册
还是jjq随便输个密码
我输的是123
它应该会出现我们的错误的信息
该用户已经存在
然后让我们继续换其他的
好
这是我们的注册
那么登录这块同理
我们也需要改造登录
我们还是要try catch
因为登录的时候也会发生
用户名和密码的
这个验证过程
在我们的service方法里
我直接调用我们的login
把我们的用户名和密码传进去
如果发生错误了
同样我们也是把错误信息放进去
只不过转向到的是我们的
login.JSP页面
如果没有发生错误
那好我就转向直接转向到我们的首页去
这样的话我们的登录就改造完了
同理
我们的登录为了让它显示我们也加
一个font标签
当然这里我没有进行很好的排版
好
大家可以去写html代码去
把font标签放的位置更合适一点
把错误信息显示出来
那么我们访问我们的
login.JSP页面
我们刚才注册了一个jjq
123
点击登录
大家可以看到我们已经正常登录到
首页了
但是如果说的是jjq1
123
它会显示用户不存在
如果说的是jjq
随便输个密码
它会显示我的是密码错误
那么这里还要注意一个问题
为了我们后续的使用方面
当我们正常登录成功以后
我们一定要把用户的信息
放在我们的session当中
所以说如果在我们调整之前
如果他正常登录了
我们通过 request.
getSession.setAttribute
我的key就是我的username
或者说叫name
叫name也行
然后我这个值放什么
实际上我想放的
是我student对象
大家可以看我login
我这个login
现在返回的就是一个student对象
它里面装载的我student
里面的所有的属性
所以说我这里就login完以后
我用一个student对象来接收一下
那么我把student对象给放进去
这样放的好处是你从session当中
取出的是student对象
你想获取对象的用户名也好
密码也好
或者用户其他的一些专业等等信息
你直接就可以拿到了
所以说这里有给它设置到session里
那么到现在为止
我们的注册和登录功能就已经非常的
完善了
这个知识点就讲到这里
谢谢
-1.0 导学
--1.0.1 导学
-1.1 Web应用开发概述
--1.1.3 测试
-1.2 准备Java Web应用开发环境
--1.2.2 测试
-1.3 任务实现:Hello World Web项目
--1.3.2 测试
-1.4 小结
--1.4.1 小结
-本课程所有代码
--课程参考代码
-2.0 导学
--2.0.1 导学
-2.1 Servlet概述
--2.1.3 测试
-2.2 创建Servlet
--2,2,3 作业
-2.3 Servlet应用
--2.3.4 测试
-2.4 任务实现:某高校毕业生信息发布系统-注册与登录(Servlet版)
--2.4.3 测试
-2.5 ServletConfig接口
-2.6 ServletContext接口
-2.7 HttpServletRequest接口
--2.7.5 测验
-2.8 HttpServletResponse接口
--2.8.3 测试
-2.9 任务实现:某高校毕业生信息发布系统-简历添加
--2.9.1 任务实现:某高校毕业生信息发布系统-简历添加
-2.10 小结
-动画演示:Java Web应用服务器处理客户端请求的过程
-3.0 导学
--3.0.1 导学
-3.1 Cookie技术
--3.1.3 测试
-3.2 Session技术
--3.2.2 Session技术-Session技术应用购物车
--3.2.3 测试
-3.3 URL重写与隐藏表单域
--3.3.2 测试
-3.4 任务实现:某高校毕业生信息发布系统-简历修改
--3.4.1 任务实现:某高校毕业生信息发布系统-简历修改
-3.5 小结
--3.5.1 小结
-4.0 导学
-4.1 jsp概述
--4.1.2 测试
-4.2 脚本元素
--4.2.2 测试
-4.3 指令元素
--4.3.2 测试
-4.4 动作元素
--4.4.3 测试
-4.5 内置对象
--4.5.3 测试
-4.6 JavaBean
--4.6.3 测试
-4.7 任务实现:某高校毕业生信息发布系统-首页(JSP版)
--4.7.1 任务实现:某高校毕业生信息发布系统-首页(JSP版)
-4.8 小结
--4.8.1 小结
-5.0 导学
--5.0.2 测试
-5.1 el语法
--5.1.2 测试
-5.2 el隐含对象
--5.2.2 测试
-5.3 任务实现:某高校毕业生信息发布系统-学生详细信息展示
--5.3.1 任务实现:某高校毕业生信息发布系统-学生详细信息展示
--5.3.2 测试
-5.4 小结
--5.4.1 小结
-6.0 导学
--6.0.2 测试
-6.1 核心标签库
--6.1.5 测试
-6.2 任务实现:某高校毕业生信息发布系统-首页(JSTL版)
--6.2.1 任务实现:某高校毕业生信息发布系统-首页(JSTL版)
--6.2.2 测试
-6.3 小结
--6.3.1 小结
-7.0 导学
--7.0_导学
-7.1 过滤器
--7.1.3 测试
-7.2 监听器
--7.2.1.1与ServletContext相关的监听器
--7.2.4 测试
-7.3 任务实现:某高校毕业生信息发布系统-单态登录
--7.3.1 任务实现:某高校毕业生信息发布系统-单态登录
--7.3.2 测试
-7.4 小结
--7.4.1小结
-8.0 导学
--8.0_导学
-8.1 JDBC API
--8.1.2 测试
-8.2 JDBC API访问MySQL基本步骤
--8.2.2 测试
-8.3 任务实现:某高校毕业生信息发布系统-注册与登录
--8.3.1 任务实现:某高校毕业生信息发布系统-注册与登录(JDBC版)
--8.3.2 测试
-8.4 小结
--8.4.1小结
-9.0导学
--9.0导学
-9.1 技术准备
--9.1.5 测试.
-9.2 系统设计
-9.3 系统实现
-9.4 小结
--9.4.1小结

