三层架构:软件设计架构
1.界面层(表示层):用户看的界面.用户可以通过界面上的组件和服务器进行交互
2,业务逻辑层: 处理业务逻辑的
3, 数据访问层:操作数据存储文件
创建三个模块
(web,service,dao)
开发规范;
公司域名
项目名
禅道
www.baidua.com
包名
1.域名反写:
com.baidua
2,拼接项目名
com.baidua.chandao
3,细分包结构
com.baidua.chandao
##
1,需求:用户信息得增删改查
设计:
技术选型:
Servlet+jsp+Mysql+JDBCTempleat+Durid+BeanUtils+tomcat
数据库设计:
开发:
环境搭建
创建数据库环境
创建项目,导入需要的jar包
编码
测试
部署运维
Servlet
1,接收前台数据
2,把数据传给service
3,接收最后的结果
4,返回前台页面展示数据
Service
1,接收Servlet的数据
2,传给dao
2,接收dao结果
4,返回给Servlet
Dao
1,接收Service的数据
2, 去数据库执行sql
3, 拿结果
4, 返回servlet
1, 学的不咋地的
导师代码一行行写注释
看
把代码删了开始写
2, 先把注释写好
跟着注释写代码
3, 逻辑和代码都需要一步步写出来
4, 扩展
注册之前的用户是否存在的判断
接收前台数据 ,前台数据怎么定义 不是sql语句,
锻炼自己的业务逻辑:
业务逻辑?
第一步 创建前台数据?
三层架构分为三步
web service dao
web :接收前台数据
service 执行业务了逻辑
dao : 接收后台数据
1,添加
表单提交用户信息(前台页面表单标签)
数据到servlet,通过beanUtils 把数据封装到对象中
servlet把user传给service
service传给dao,dao执行插入操作,把数据插入到数据库
service访问用户列表的servlet(数据要重新查询)
2,删除
前台页面点击删除触发删除操作 (confirm().id的传递)
servlet接收id,传给service,传给dao
dao根据id执行删除操作
servlet访问用户列表的servlet(数据要重新查询)
3,修改
如果外界传入了一个不合法的id,我们应该怎么做 ?
回显操作
回顾:
列表显示
登录
添加
修改
删除
围绕:三层架构
web
1,接收前台数据(request.getParamter())
2,把数据进行封装(BeanUtils)
3, 把数据传给service(loginUser=loginService.login(u))
4, 对service返回的结果进行判断 if(loginUser==null)
5, 返回页面
responce.getWriter().write()
responce.sendRedirect()
responce.getRequestDispatcher().forward()
6, service
把数据传给dao(loginUser=loginDao.login(u))
接收结果返回给web(return loginUser)
dao
去数据库执行操作(CRUD)
把结果返回service
----------------------------------------------------------------------
选中删除
分页
复杂分页(了解)
删除选中:
1,获取选中条目的id
2,将这些id提交到DelSelectedServlet
DelSelectedServlet
onsubmit是一个事件,submit是一个属性
删除选中:
三层架构:
分页:
为什么要用分页
(防止内存溢出)
减轻服务器内存的开销
提升用户体验
分析:
输入:客户端给服务器端数据
输出:服务器端给客户端数据
思路:
//int totalCount 总记录数
int totalPage 总页码 =总记录数%每页显示条数==0?总记录数/每页显示条数:总记录数/每页显示条数+1
List list; 煤业的数据list集合
int currentpage 当前页码
分页实现:
前台:
每页显示数
当前页码
传递给后台
前台页面展示
数据 EL+JSTL
页码 JSTL+EL+总页数
总条数
当前页
后台:
后台把数据返回给前台
1,数据--->list
2,总记录数
3,总页数
4,当前页码
5,每页显示数
把目标数据进行封装 --->PageBean
1,前台传递给后台 每页显示数,当前页码
2 后台接收参数 --->查到对应的数据返回给前台
封装PageBean
如何封装:
1,数据---->List 数据库查询
SELECT * FROM 表 WHERE 条件 LIMIT index,count
index --> 开始查询的索引
count --> 每页显示的条数
index的计算方式
(当前页-1)*每页显示数
2,总记录数 数据库查询
3,总页数 自己计算
4,当前页码 前台传递的参数
5,每页显示数 前台传递的参数
servlet
接收当前页,每页数
分页?
减轻服务器压力
提升用户体验
分页实现
前台
传递给后台
每页显示数
当前页码
前台页面展示
数据 EL+JSTL
页码 JSTL+EL+总页数
总页数
总条数
当前页 c:if
后台
后台把数据返回给前台
1.数据->List
2.总记录数
3.总页数
4.当前页码
5.每页显示数
把目标数据进行封装->PageBean
1.前台传递给后台 每页显示数,当前页码
2.后台
接收参数 -> 查到对应的数据返回给前台
封装PageBean
如何封装
1.数据->List 数据库查询
SELECT * FROM 表 WHERE 条件 LIMIT index,count
index -> 开始查询的索引
count -> 每页显示的条数 ->每页显示数(已经存在)
index的计算方式
(当前页-1)*每页显示数
2.总记录数 数据库查询
3.总页数 自己计算
总记录数%每页显示数 == 0 ? 总记录数/每页显示数 : 总记录数/每页显示数+1
4.当前页码 前台传递的参数
5.每页显示数 前台传递的参数
把pageBean对象存到request域中,请求转发显示
service
封装PageBean
new 对象
set方法设置
dao
查数量
查数据
复杂分页
动态SQL(掌握!!)
前端
提交: rows currentpage
name address email
展示:
数据
分页效果
显示页码数 ${pb.totalPage}
显示总个数 ${pb.tatalCount}
遍历显示页码
<c:foreach begin and var>
<li>${i}>
当前页
<c:if test="{i==currentpage}">'
上一页/下一页
pb.currentPage+1>pb.totalPage
pb.currentPage=1
pb.currentPage+1>pb.totalPage
pb.currentPage=pb.totalPage
后台:
后台
面试很有可能会问你业务逻辑,并让你详解逻辑的可行性
也叫面向接口的编程方式:service实现类的好处,将来如果某个实现类功能有缺陷我们只需要替换某个实现类就好,而不需要去改动接口,提升了程序的扩展性和可维护性
目的:
查询用户的所有信息
增加用户的信息
删除用户的信息
修改用户的信息
选中删除
用户分页查询
加强版用户分页查询
|
|