文章目录
- 1.后台管理—添加家居
- 1.需求分析
- 2.程序框架图
- 3.修改FurnDao
- 添加方法add
- 4.修改FurnDaoImpl
- 添加方法add
- 5.单元测试
- FurnDaoTest.java
- 6.修改FurnService
- 添加方法add
- 7.修改FurnServiceImpl
- 添加方法add
- 8.单元测试
- FurnServiceTest.java
- 9.修改furn_add.jsp
- 10.修改FurnServlet
- 添加add方法
- 11.单元测试
- 1.中文乱码问题
- 修改BasicServlet
- 2.表单重复提交问题
- 使用重定向解决,修改FurnServlet
- 3.用户输入格式错误
- 1.前端添加js验证
- 2.后端异常处理
- 2.BeanUtils自动封装javabean
- 1.基本介绍
- 2.代码实例
- 修改FurnServlet.java
- 3.单元测试
- 数据不能为null的异常
- 在javabean中设置默认值,并进行判断
- 4.使用DataUtils封装并处理异常
- 1.DataUtils.java
- 2.修改FurnServlet
- 3.后台管理—删除家居
- 1.需求分析
- 2.程序框架图
- 3.编写dao层
- 1.修改FurnDao
- 添加方法deleteFurnById
- 2.修改FurnDaoImpl
- 添加方法deleteFurnById
- 3.单元测试
- FurnDaoTest.java
- 4.编写service层
- 1.修改FurnService
- 添加方法deleteFurnById
- 2.修改FurnServiceImpl
- 添加方法deleteFurnById
- 3.单元测试
- FurnServiceTest
- 5.修改furn_manage.jsp
- 1.前端删除提示
- 2.超链接设置
- 6.修改FurnServlet
- 添加方法del
- 7.结果展示
- 1.点击删除
- 2.删除之后重定向
- 4.后台管理—修改家居
- 1.需求分析
- 2.程序框架图
- 3.编写dao层
- 1.修改FurnDao
- 添加方法queryFurnById和updateFurn
- 2.修改FurnDaoImpl
- 添加方法queryFurnById和updateFurn
- 3.单元测试
- FurnDaoTest
- 4.编写service层
- 1.修改FurnService
- 添加方法queryFurnById和updateFurn
- 2.修改FurnServiceImpl
- 添加方法queryFurnById和updateFurn
- 3.单元测试
- FurnServiceTest
- 5.编写web层—使数据回显
- 1.修改furn_update.jsp
- 2.修改furn_manage.jsp
- 3.修改FurnServlet
- 添加方法showFurn
- 4.结果展示
- 1.点击铅笔修改
- 2.数据回显
- 6.编写web层—修改家居信息
- 1.修改furn_update.jsp
- 2.修改FurnServlet
- 增加方法updateFurn
- 3.结果展示
- 1.初始修改界面
- 2.准备修改
- 3.修改成功
1.后台管理—添加家居
1.需求分析
2.程序框架图
3.修改FurnDao
添加方法add
//向数据库中添加家居
public int add(Furn furn);
4.修改FurnDaoImpl
添加方法add
/**
* 添加家居
* @return 成功返回1,失败返回-1
*/
@Override
public int add(Furn furn) {
String sql = "insert into furn values(null, ?, ?, ?, ?, ?, ?)";
//添加家居
int update = update(sql, furn.getName(), furn.getMaker(),
furn.getPrice(), furn.getSales(), furn.getStock(), furn.getImgPath());
return update;
}
5.单元测试
FurnDaoTest.java
@Test
public void add() {
Furn furn = new Furn(null, "温馨风格盆景架", "蚂蚁家居", new BigDecimal(122), 12, 12, "assets/images/product-image/16.jpg");
if (furnDao.add(furn) == 1) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
}
6.修改FurnService
添加方法add
//2.添加家居
public boolean add(Furn furn);
7.修改FurnServiceImpl
添加方法add
/**
* 添加家居
* @param furn
* @return 成功返回true,失败返回false
*/
@Override
public boolean add(Furn furn) {
return furnDao.add(furn) == 1 ? true : false;
}
8.单元测试
FurnServiceTest.java
@Test
public void add() {
Furn furn = new Furn(null, "温馨风格盆景架", "蚂蚁家居", new BigDecimal(122), 12, 12, "assets/images/product-image/16.jpg");
if (furnService.add(furn)) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
}
9.修改furn_add.jsp
10.修改FurnServlet
添加add方法
/**
* 添加家居并重新获取家居信息,请求转发到furn_manage.jsp
* @param req
* @param resp
*/
public void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
//获取表单信息
String name = req.getParameter("name");
String maker = req.getParameter("maker");
String price = req.getParameter("price");
String sales = req.getParameter("sales");
String stock = req.getParameter("stock");
//封装到bean中
Furn furn = new Furn(null, name, maker, new BigDecimal(price), Integer.parseInt(sales), Integer.parseInt(stock), "");
//插入到数据库
if (furnService.add(furn)) {
//插入成功则重新获取家居信息并请求转发
list(req, resp);
} else {
System.out.println("插入失败");
}
}
11.单元测试
1.中文乱码问题
修改BasicServlet
2.表单重复提交问题
使用重定向解决,修改FurnServlet
3.用户输入格式错误
1.前端添加js验证
<%-- 引入jquery --%>
<script type="text/javascript" src="script/jquery-3.6.0.min.js"></script>
<script>
//验证表单输入信息
$(function () {
//给提交按钮绑定事件
$("input[value='添加家居']").click(function () {
//获取价格数据
var price = $("input[name='price']").val();
//正则验证
var pricePattern = /^(0(\.\d+)?|[1-9]\d*(\.\d+)?)$/;
if (!pricePattern.test(price)){
alert("价格格式不正确!")
return false; //取消提交表单
}
//获取销量数据
var sales = $("input[name='sales']").val();
//正则验证
var salesPattern = /^(0|[1-9]\d*)$/;
if (!salesPattern.test(sales)) {
alert("销量格式不正确!")
return false;
}
//获取库存数据
var stock = $("input[name='stock']").val();
//正则验证
var stockPattern = /^(0|[1-9]\d*)$/;
if (!stockPattern.test(stock)) {
alert("库存格式不正确!")
return false;
}
return true;
})
})
</script>
结果展示
2.后端异常处理
1.修改FurnServlet
2.修改furn_add.jsp
3.结果展示
2.BeanUtils自动封装javabean
1.基本介绍
2.代码实例
修改FurnServlet.java
/**
* 添加家居并重新获取家居信息,请求转发到furn_manage.jsp
* @param req
* @param resp
*/
public void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException, InvocationTargetException, IllegalAccessException
//使用BeanUtils工具类封装信息
Furn furn = new Furn();
//使用工具类获取表单的输入信息,并使用反射将其封装到bean中,注意,name必须与bean的属性对应
BeanUtils.populate(furn, req.getParameterMap());
System.out.println(furn);
//插入到数据库
if (furnService.add(furn)) {
//插入成功则重定向到家居显示的servlet
resp.sendRedirect(super.getServletContext().getContextPath() + "/manage/furnServlet?action=list");
} else {
System.out.println("插入失败");
}
}
3.单元测试
数据不能为null的异常
在javabean中设置默认值,并进行判断
4.使用DataUtils封装并处理异常
1.DataUtils.java
package com.sxs.furns.utils;
import org.apache.commons.beanutils.BeanUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
/**
* @author 孙显圣
* @version 1.0
*/
public class DataUtils {
//封装bean的异常处理
public static <T> T copyParamToBean(Map value, T bean){ //bean的类型不确定,所以使用泛型
try {
BeanUtils.populate(bean, value);
//进行异常处理
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
//没有异常再返回bean
return bean; //由于返回的是bean,所以返回值也应该是bean类型T
}
}
2.修改FurnServlet
/**
* 添加家居并重新获取家居信息,请求转发到furn_manage.jsp
* @param req
* @param resp
*/
public void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException, InvocationTargetException, IllegalAccessException {
//使用工具类封装并处理异常
Furn furn = DataUtils.copyParamToBean(req.getParameterMap(), new Furn());
//插入到数据库
if (furnService.add(furn)) {
//插入成功则重定向到家居显示的servlet
resp.sendRedirect(super.getServletContext().getContextPath() + "/manage/furnServlet?action=list");
} else {
System.out.println("插入失败");
}
}
3.后台管理—删除家居
1.需求分析
2.程序框架图
3.编写dao层
1.修改FurnDao
添加方法deleteFurnById
//根据id删除家居
public int deleteFurnById(Integer id);
2.修改FurnDaoImpl
添加方法deleteFurnById
/**
* 删除家居
* @param id
* @return 成功返回1,失败返回-1
*/
@Override
public int deleteFurnById(Integer id) {
String sql = "delete from furn where id = ?";
//删除家居
return update(sql, id);
}
3.单元测试
FurnDaoTest.java
@Test
public void deleteFurnById() {
if (furnDao.deleteFurnById(13) == 1) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
}
4.编写service层
1.修改FurnService
添加方法deleteFurnById
//3.根据id删除家居
public boolean deleteFurnById(Integer id);
2.修改FurnServiceImpl
添加方法deleteFurnById
/**
* 根据id删除家居
* @param id
* @return 成功返回true,失败返回false
*/
@Override
public boolean deleteFurnById(Integer id) {
return furnDao.deleteFurnById(id) == 1 ? true : false;
}
3.单元测试
FurnServiceTest
@Test
public void deleteFurnById(){
if (furnService.deleteFurnById(16)) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
}
5.修改furn_manage.jsp
1.前端删除提示
<%--引入jquery--%>
<script type="text/javascript" src="script/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function () { //页面加载完毕后执行function(){}
//绑定点击事件
$("a.deleteCss").click(function () {
//获取到要删除的家居的名字
var furnName = $(this).parent().parent().find("td:eq(1)").text();
//1. confirm方法会弹出一个确认窗口
//2. 点击确定,返回true
//3. 点击取消,返回false
return confirm("你确定要删除【" + furnName + "】?");
})
})
</script>
2.超链接设置
6.修改FurnServlet
添加方法del
/**
* 根据获取的id删除家居,获取家居信息并重定向到furn_manage.jsp
* @param req
* @param resp
*/
public void del(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//获取id
String id = req.getParameter("id");
//根据id删除
if (furnService.deleteFurnById(Integer.parseInt(id))) {
resp.sendRedirect(super.getServletContext().getContextPath() + "/manage/furnServlet?action=list");
} else {
System.out.println("删除失败");
}
}
7.结果展示
1.点击删除
2.删除之后重定向
4.后台管理—修改家居
1.需求分析
2.程序框架图
3.编写dao层
1.修改FurnDao
添加方法queryFurnById和updateFurn
//根据id查询家居
public Furn queryFurnById(Integer id);
//根据Furn对象修改家居
public int updateFurn(Furn furn);
2.修改FurnDaoImpl
添加方法queryFurnById和updateFurn
/**
* 根据id查询
*
* @param id
* @return 成功返回Furn对象,失败返回null
*/
@Override
public Furn queryFurnById(Integer id) {
String sql = "select * from furn where id = ?";
return querySingle(sql, Furn.class, id);
}
/**
* 根据furn的id来更新所有记录
*
* @param furn
* @return 成功返回1,失败返回-1
*/
@Override
public int updateFurn(Furn furn) {
String sql = "update furn set name = ?, maker = ?, price = ?, sales = ?, stock = ?, " +
"img_path = ? WHERE id = ?";
return update(sql, furn.getName(), furn.getMaker(), furn.getPrice(),
furn.getSales(), furn.getSales(), furn.getImgPath(), furn.getId());
}
3.单元测试
FurnDaoTest
@Test
public void queryFurnById() {
Furn furn = furnDao.queryFurnById(1);
if (furn != null) {
System.out.println(furn);
} else {
System.out.println("查询失败");
}
}
@Test
public void updateFurn() {
Furn furn = new Furn(20, "温馨风格盆景架", "蚂蚁家居", new BigDecimal(122), 12, 12, "assets/images/product-image/16.jpg");
if (furnDao.updateFurn(furn) == 1) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
}
4.编写service层
1.修改FurnService
添加方法queryFurnById和updateFurn
//4.根据id查询家居
public Furn queryFurnById(Integer id);
//5.根据Furn对象修改家居
public boolean updateFurn(Furn furn);
2.修改FurnServiceImpl
添加方法queryFurnById和updateFurn
/**
* 根据id查询家居
* @param id
* @return 成功返回Furn对象,失败返回null
*/
@Override
public Furn queryFurnById(Integer id) {
return furnDao.queryFurnById(id);
}
/**
* 根据furn对象的id来更新信息
* @param furn
* @return 成功返回true,失败返回false
*/
@Override
public boolean updateFurn(Furn furn) {
return furnDao.updateFurn(furn) == 1 ? true : false;
}
3.单元测试
FurnServiceTest
@Test
public void queryFurnById() {
Furn furn = furnService.queryFurnById(1);
if (furn != null) {
System.out.println(furn);
} else {
System.out.println("查询失败");
}
}
@Test
public void updateFurn() {
Furn furn = new Furn(20, "11111", "蚂蚁家居", new BigDecimal(122), 12, 12, "assets/images/product-image/16.jpg");
if (furnService.updateFurn(furn)) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
}
5.编写web层—使数据回显
1.修改furn_update.jsp
2.修改furn_manage.jsp
3.修改FurnServlet
添加方法showFurn
/**
* 根据id查询家居信息,将信息请求转发到前端
*
* @param req
* @param resp
*/
public void showFurn(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取id
String id = req.getParameter("id");
//根据id查询信息
Furn furn = furnService.queryFurnById(Integer.parseInt(id));
if (furn != null) {
//将信息放到request中并请求转发到furn_update.jsp
req.setAttribute("furn", furn);
req.getRequestDispatcher("/views/manage/furn_update.jsp").forward(req, resp);
} else {
System.out.println("查询失败");
}
}
4.结果展示
1.点击铅笔修改
2.数据回显
6.编写web层—修改家居信息
1.修改furn_update.jsp
2.修改FurnServlet
增加方法updateFurn
/**
* 读取表单信息,进行修改
* @param req
* @param resp
*/
public void updateFurn(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//使用工具类将表单信息封装到bean中
Furn furn = DataUtils.copyParamToBean(req.getParameterMap(), new Furn());
//执行更新操作
if (furnService.updateFurn(furn)) {
//更新成功则重定向到展示页面
resp.sendRedirect(super.getServletContext().getContextPath() + "/manage/furnServlet?action=list");
}
}