JavaWeb--09Servlet深入:JavaWeb三层架构---注册系统

一套完整的网页到Java到数据库的创建:

html:进行数据收集以及呈现

第一层:根据servlet处理前台html的响应和请求,对数据进行接收,封装和验证

第二层:业务,验证是否存在调用创建的dao查,以及存在就直接返回,没有存在就调用将数据传输到数据库

第三层:对数据库进行操作,比如:用户添加或者进行查咋,无非就是增删改查

思想:

分析业务:从前往后

开始业务:从后往前

以下是一个简单登录系统业务,对于这用户登录系统将分成多个小的业务进行完成:

①注册界面

②显示所有用户界面

③删除用户

④修改用户信息界面

⑤动态搜索栏

⑥批量删除

开始业务前的准备工作:

打开idea创建一个web工程,并将Tomcat进行整合,导入所需要的包具体用到的包放在这里:

bao.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)

这些包都放在创建的web工程下WEB-INF包创建的lib下,具体怎么整合传送门:JavaWeb--纯小白笔记04:Tomcat整合IDEA-CSDN博客

一.注册用户界面

根据业务的分析,从前往后:

1.创建数据库:(数据库安装包以及教程:百度网盘 请输入提取码)

记住自己的数据库的用户名,密码,以及数据库的名字和创建的表的名字,这里我的数据库的相关信息为:用户名:root ;密码:123456 ;数据库名:db.test ;表名:user 字符集编码使用utf-8

2.连接数据库:

在ideaa创建的web工程下的src创建一个file包再创建一个properties文件装我们数据库的信息

创建一个工具包Utils,创建一个DBUtils类进行连接数据库,关闭数据库的操作,这里为了优化数据库的连接将使用导入的io流的包,创建一个类加载器---普通java类利用自身类的类加载器读取外部文件。

类加载器:

连接数据库:

因为业务的太多,在测试类中使用导入的junit包用来测试每一步:

2.将数据库的用户信息进行封装---放在domain包下---注意id是不用进行有参的,且toString里的id是不用打印的

3。创建一个dao包里面先创建一个接口再创建一个包,包里创建一个类实现接口。在接口里写方法。

查询注册的用户的姓名是否存在,以及添加用户

在测试类进行测试查找用户以及添加用户:

4.在service层,进行业务的处理:

在src下创建一个service包,同样使用接口实现的方法。创建一个接口在从创建一个包去实现:

5.创建一个controller包,里面进行对html网页内容的请求和响应:

点击发布,就是右上角的运行,选择tomcat发布,在打开的网页注册一个用户,如下

点击注册后会提示,注册成功,打开数据库就能看见添加的用户

以上就是一个简单的注册系统,但是还要进行数据验证合法性,这里只对用户名和年龄进行数据合法进行验证,不合法就进行提示且红色:

6.在src创建一个validate包,在包里进行数据的合法性验证,具体代码如下:

因为需要的时在注册用户时,对用户名以及密码进行不合法提示,所有在rejister.jsp对用户栏和密码栏要添加如下代码:这里的代码时jsp代码elo表达式:

复制代码
<span style="color: red">${errors.username}
复制代码
<span style="color: red">${errors.age}

最后在UserServlet的register业务下进行将跳转---将信息跳转到页面上:

补充知识:

转发:一次请求

重定向:2次请求,地址也会发生变化

跳转使用的时域对象,四大域对象如下介绍:

|------------------------------------|-------------------|
| request(实际开发中一般都用request实现转发) | 一次响应 |
| session(默认时间30min在服务器端内存) | 一次会话(浏览器打开到关闭为一次) |
| pagecontext | |
| servletcontext(在jsp中就是application) | 最大的域对象 |

所以在register处就要进行一个对错误信息的跳转,这里使用的session,登录信息一般放在session中

现在启动tomcat,进行注册,当用户名长度小于6大于18时以及年龄小0大120提示不合法

这里用户名和年龄不合法,在点击注册后就会清空进行提示

二.查找所有用户信息界面

该业务就是将数据库里的所有数据进行打印出来反映到界面上,要重新写2个界面,一个是放查询超链接的界面,另一个是跳转进超链接显示所有用户信息的界面

1.编辑超链接的界面,在web下的index.jsp写一个显示所有用户的超链接代码如下:

这里要注意导入在daomain写的user类,这里再jsp写的是jsp语句进行连接再showUserAll写的显示所有信息。

这里的红线使用的是导入的包jstl,便于进行的就是jsp的写法,elo表达式。

以上只是对前台的设置,接下来将对数据库的数据进行读取

2.在dao层的接口先写抽象方法,再在实现类UserDaoImpl进行属性具体的查找所有用户的方法:

在测试类进行测试是否查找到所有的用户:

3.测试成功,在service层进行业务逻辑编写:

4.在controller层进行连接前台获取数据,在原本的UserServlet类中进行业务的判断:

这里的业务,是在index.jsp里的业务名字

5.最后发布tomcat点击超链接就会显示如下的界面:

三.删除用户业务

在显示用户的界面游两个超链接:修改和删除,这里将对删除进行业务实现:

思想:在页面展示信息,点击删除的超链接后,获取id,在controller层进行调用service的业务逻辑处理,service层调用dao层的对数据库的处理方法;

开始业务:

1.在dao层的接口书写删除的抽象方法,再在实现类UserDaoImpl进行实现。注意:这里还要进行一个id查找用户,用于判断是否用户存在----因为在页面操作的可能同时在操作

2.在service层进行业务逻辑处理:先在接口进行定义抽象方法,再在实现类进行实现:

3.在显示界面,showuserall.jsp里的删除处的连接添加连接代码以及业务的名称:

<a href="UserServlet?id=${user.id}&business=delete">删除</a>-----这里的超链接就是后台的UserServlet里进行判断业务,再工具id查找。

4.在controller层的UserServlet类进行,进行删除业务的进行

红圈是在删除后,显示删除后的所有用户的页面。

5.发布tomcat,在显示界面进行删除

删除id4号

四·.修改页面

分析:点击修改超链接,就跳转到一个修改界面,要显示原本的数据,且密码显示出来,在该页面将对用户的数据的进行修改,最后提交。

开始业务:

1.在web下创建一个修改界面update.jsp----写法和register没有太大的区别,主要是对文本框获得值

获取的代码就是elo表达式value=${user.id}.....

注意:修改信息是要展示密码的文本内容,所以在password处type="text";

2.在dao层进行对数据库的修改信息操作,但是要先展示选择的内容,所以这里书写2个方法:

findUserByID()----显示原本的内容,update()---修改数据库内容的方法

在dao层实现:

3.在service层进行调用,完成对业务逻辑的处理:

先在接口进行定义:

再在实现类UserServiceImpl进行调用dao层的业务:

4.在controller进行连接前台的数据进行对数据的修改,在点击修改业务就要进行回显的业务,展示一个界面

在UserServlet里先进行回显:

这里就会获取要修改的用户的id,返回用户,再把这个用户重定向跳转到update.jsp页面。在再UserServlet里书写修改的代码

进行修改操作:

将上面信息进行修改:

修改后:

修改完成了。

五.动态搜索栏

分析:在显示用户信息的表单里有一个下拉框选择用户的信息,一个文本框进行输入,一个按钮就行搜索,在下拉框选择了性别或许姓名的某一个包含字就会返回所有满足的用户。在controller层进行接收选择的搜索条件,调取service层的逻辑处理业务---就是dao层写的查找业务。找到符合条件的用户集合返回。

开始业务:

1.在显示用户信息的表单里添加一个动态搜索栏:

具体代码:

这样就是把动态搜索栏放在了最右侧,下拉就可以选择具体查找的要求 ,业务名为quer:

2.在dao层进行对数据库代码的操作:

先在接口中定义方法,因为要先接收选的具属性,再接收具体的值找到满足条件的用户,用集合进行装,这里的方法findUserBy为:

再实现这个方法这里的性别是直接查找,但是姓名和地址是模糊查找,所以sql语句不同需要判断key的值就是下拉列表的选择:

3.在service层进行业务逻辑处理,调用dao层的方法:

依旧是先在接口定义抽象方法:

实现类:

4.在controller层接收前台的数据,在进行对业务进行调用:

在找到对应的用户放进集合后,使用前面的显示跳转到显示页面5.

5.发布tomcat进行查找,这里提前给数据库添加了用户:

对性别--男进行检索:

动态栏业务就完毕了。

相关推荐
布说在见7 小时前
微服务架构---认识Zuul
运维·微服务·架构
武子康9 小时前
大数据-160 Apache Kylin 构建Cube 按照日期构建Cube 详细记录
大数据·clickhouse·架构·flink·系统架构·apache·kylin
武子康9 小时前
大数据-159 Apache Kylin 构建Cube 准备和测试数据
大数据·clickhouse·hdfs·架构·flink·apache·kylin
Licky1311 小时前
详情说明HTTP/2和HTTP/3两者间的区别
网络·网络协议·http·架构·https
Hello.Reader17 小时前
深入解析 Baichuan 模型:架构、训练与实际应用
人工智能·深度学习·chatgpt·架构
bug菌¹17 小时前
滚雪球学Redis[4.1讲]:Redis的高可用性与集群架构
数据库·redis·架构
PangPiLoLo17 小时前
高性能架构——计算高性能
java·网络·架构·java-ee·系统架构
Hello.Reader17 小时前
KEFK 架构实时数据处理
大数据·架构
东城绝神17 小时前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版分片集群》
linux·运维·mongodb·架构