1.显示所有联系人
-
用户在浏览器发送请求,linkMan?method=findAll
-
Servlet接收请求处理
//1.调用service处理获得List<LinkMan>对象集合数据 //2.将List<LinkMan>对象集合数据存储到request域对象中 //3.使用request转发跳转到list.jsp页面【获取request作用域中存储的数据 在页面进行填充展示】
-
Service处理
//1.调用dao层处理,获得List<LinkMan>对象集合数据返回
-
dao处理
//1.使用DBUtils查询所有联系人数据,封装结果集到List<LinkMan>,返回
-
Servlet将数据传给页面,list.jsp加载数据展示
//1.使用jstl标签forEach进行遍历加载显示 <c:forEach var="linkman" items="${list}"> <tr> <td>${linkman.id}</td> <td>${linkman.name}</td> <td>${linkman.sex}</td> <td>${linkman.age}</td> <td>${linkman.address}</td> <td>${linkman.qq}</td> <td>${linkman.email}</td> </tr> </c:forEach>
2.添加联系人
-
点击添加联系人跳转到add.jsp页面
-
在add.jsp页面填写联系人信息提交到LinkManServlet
-
LinkManServlet处理
//1.获取请求参数,将联系人信息封装到LinkMan javabean中 //2.调用LinkManService完成业务处理 将LinkeMan对象添加到数据库 //3.添加之后,响应显示所有联系人给用户
-
LinkManService处理
//调用LinkManDao操作数据库将LinkMan存入数据库
-
LinkManDao处理
//使用DBUtils操作数据库将LinkMan插入到DB中
-
在增删改查操作时,
查询显示最好选择转发即可
增删改选择重定向(转发地址栏不变,刷新时可能会导致二次加载或出现异常)
3.删除联系人
-
流程:点击删除按钮-->弹窗确认对话框-->点击确定向后台发起删除请求-->重新查询所有联系人显示
-
思路
-
编写js函数deleteById(id)
-
获取要删除的联系人id
-
发起删除请求 ==location.href = "linkMan?method=delete&id="+id;==
-
-
编写Servlet
-
获取要删除的联系人id
-
调用业务处理
-
响应 无论删除成功还是失败 都重新查询数据库展示所有联系人
-
-
编写Service
-
编写Dao
-
操作数据库 删除一条联系人记录
-
-
4.分页展示联系人
utils
package com.itheima.bean;
import java.io.Serializable;
import java.util.List;
public class PageBean implements Serializable {
private int curPageNo; //当前页码
private int pageSize; //每页显示条数
private long total; //总条数 原因:因为select count(*) from 表 返回的结果是long类型
private int pages; //总页数
private List<LinkMan> list; //每页显示的数据
@Override
public String toString() {
return "PageBean{" +
"curPageNo=" + curPageNo +
", pageSize=" + pageSize +
", total=" + total +
", pages=" + pages +
", list=" + list +
'}';
}
public PageBean() {
}
public PageBean(int curPageNo, int pageSize, long total, int pages, List<LinkMan> list) {
this.curPageNo = curPageNo;
this.pageSize = pageSize;
this.total = total;
this.pages = pages;
this.list = list;
}
public int getCurPageNo() {
return curPageNo;
}
public void setCurPageNo(int curPageNo) {
this.curPageNo = curPageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public List<LinkMan> getList() {
return list;
}
public void setList(List<LinkMan> list) {
this.list = list;
}
}
web
// 1.获取当前请求参数【当前页码:curPageNo 每页显示条数:pageSize】
// 如果前端每页传递当前页面,默认显示第一页,如果传递,安装指定页码查询
// 如果前端没有设置每页要显示的条数,就默认每页显示5条
// 2.调用业务处理,返回pageBean对象
// 3.响应
// 3.1,。将pageBean对象存入request作用域
// 3.2.使用转发跳转list_page.jsp进行分页展示
service
// 1.调用dao
// 1.1 查询总条数
// 1.2 查询每页显示数据
// 2.将分页数据封装到pageBean对象
// 计算总页数
// 3.返回pageBean对象
数据库技术
--1.分页 limit关键字
select * from 表 limit a,b;
--a:表示起始位置 a=(当前页码-1)*b
--b:表示每页显示条数
--2.查询总记录数 long
select count(*) from 表
--3.计算总页数
pages = total%pageSize==0?total/pageSize:total/pageSize+1;
1. 前端发起查询分页展示,传递当前页码,不传默认显示第1页
==linkMan?method=findPage&curPageNo=2==
2. LinkManServlet
//1.获取分页查询的当前页码curPageNo和每页显示条数pageSize
如果curPageNo和pageSize没有,就自定义设置当前查询时第1页,并设置每页显示5条
//2.调用Service查询得到PageBean对象,存入到Request作用域中
//3.转发到list_page.jsp页面进行分页显示
3. LinkManService
//封装返回PageBean对象
//1.调用dao查询总条数封装到PageBean属性中
//2.根据当前页码调用dao查询当前页数据封装到PageBean的list中
//3.返回PageBean对象
4.LinkManDao
//1.查询总条数
long findCount(){}
//2.查询当前页数据
List<LinkMan> findList(curPageNo,pageSize){}
5.PageBean优化【使用泛型】
6.模块Servlet优化
去掉if判断,使用反射
反射 根据传入的方法名进行方法动态调用
//特点:①每个方法名都和method参数名称相同 ②每个方法的参数都是一样的
//优化:根据method参数值去调用相应的方法执行处理请求 使用反射:Method对象.invoke(Object o,params...);
// 1.获取字节码对象
// 2.根据方法获取指定的method对象
//getMethod():获取的是public修饰的方法 getDeclaredMethod():获取当前类中任意修饰符修饰的方法
// 3.使用method对象调用方法
7.更新联系人
public void findById(HttpServletRequest request,HttpServletResponse response){
//1.获取要修改联系人的id
//2.调用service根据id查询联系人信息返回
//3.响应
//3.1:将要修改的联系人数据存入到request作用域中
//3.2:转发到update.jsp页面填充数据显示
}
//根据id修改联系人
public void update(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//1.获取要修改的联系人信息
//2.调用service处理
//3.响应 重新查询所有联系人数据,跳转到list.jsp页面显示
}
传送门: