项目阶段三:图书模块的增删改查

本文详细介绍了一个图书管理系统的设计与实现过程,包括图书列表显示、添加、删除及修改等功能的具体实现方式。文章通过具体代码示例展示了如何利用Servlet进行业务处理,并结合JSP页面完成数据展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写图书模块的 Web 层,和页面联调测试

5.1、图书列表功能的实现

1、图解列表功能流程

在这里插入图片描述

2、BookServlet 程序中添加 list 方法

protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    //1 通过BookService查询全部图书
    List<Book> books = bookService.queryBooks();
    //2 把全部图书保存到Request域中
    req.setAttribute("books",books);
    //3、请求转发到/pages/manager/book_manager.jsp页面
    req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);

}

配置web文件:

在这里插入图片描述

3、修改【图书管理】请求地址

在这里插入图片描述

注意:在BaseServlet程序中要添加上doGet方法,不然没办法直接访问BookServlet程序

public class BaseServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

4、修改 pages/manager/book_manager.jsp 页面的数据遍历输出

记得要使用JSTL前要导包:
在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<table>
	<tr>
		<td>名称</td>
		<td>价格</td>
		<td>作者</td>
		<td>销量</td>
		<td>库存</td>
		<td colspan="2">操作</td>
	</tr>
	<c:forEach items="${requestScope.books}" var="book">
	<tr>
		<td>${book.bookName}</td>
		<td>${book.price}</td>
		<td>${book.author}</td>
		<td>${book.sales}</td>
		<td>${book.stock}</td>
		<td><a href="book_edit.jsp">修改</a></td>
		<td><a href="#">删除</a></td>
	</tr>
	</c:forEach>
	<tr>添加图书功能的实现
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td><a href="/pages/manager/book_edit.jsp">添加图书</a></td>
	</tr>	
</table>

5.2、前后台的简单介绍

为什么配置文件url-pattern要加/manager

在这里插入图片描述
在这里插入图片描述

5.3、添加图书功能的实现

1、添加图书流程细节

在这里插入图片描述

2、问题说明:表单重复提交

当用户提交完请求,浏览器会记录下最后一次请求的全部信息。当用户按下功能键 F5,就会发起浏览器记录的最后一次 请求。
请求转发是一次请求,地址映射到http://localhost:8080/工程名/下的web,重定向是两次请求,且地址映射到http://localhost:8080/

3、BookServlet 程序中添加 add 方法

   protected void addBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //        1、获取请求的参数==封装成为Book对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.addBook()保存图书
        bookService.addBook(book);
//        3、跳到图书列表页面
//        当用户提交完请求,浏览器会记录下最后一次请求的全部信息。当用户按下功能键 F5,就会发起浏览器记录的最后一次 请求。
//        请求转发是一次请求,地址映射到http://localhost:8080/工程名/下的web,重定向是两次请求,且地址映射到http://localhost:8080/
//                /manager/bookServlet?action=list
     //   req.getRequestDispatcher("manager/bookServlet?action=list").forward(req,resp);
//        getContextPath():取得工程名路径
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");
    }

4、修改 book_edit.jsp 页面

<div id="main">
	<form action="manager/bookServlet" method="get">
		<input type="hidden" name="action" value="addBook">
		<table>
			<tr>
				<td>名称</td>
				<td>价格</td>
				<td>作者</td>
				<td>销量</td>
				<td>库存</td>
				<td colspan="2">操作</td>
			</tr>		
			<tr>
				<td><input name="bookName" type="text" value="安徒生童话"/></td>
				<td><input name="price" type="text" value="29.9"/></td>
				<td><input name="author" type="text" value="安徒生"/></td>
				<td><input name="sales" type="text" value="1000"/></td>
				<td><input name="stock" type="text" value="50"/></td>
				<td><input type="submit" value="提交"/></td>
			</tr>	
		</table>
	</form>

5.4、删除图书功能的实现

1、图解删除流程:

在这里插入图片描述

2、BookServlet 程序中的 delete方法:

    protected void deleteBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//        1、获取请求的参数id,图书编程
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
//        2、调用bookService.deleteBookById();删除图书
        bookService.deleteBookById(id);
//                /book/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");
    }

3、给 WebUtils 工具类添加转换 int 类型的工具方法

/**
 * 将字符串变为整型
 * @param str 要转换的字符串
 * @param defaultValue 转换不成功给其默认值
 * @return 转换后的数据
 */
public static int parseInt(String str,int defaultValue){
    try {
        return Integer.parseInt(str);
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }

    return defaultValue;
}

4、修改删除的连接地址:

${book.stock} 修改 删除 ### 5、给删除添加确认提示操作:
<script type="text/javascript">

	$(function () {
		// 给删除的a标签绑定单击事件,用于删除的确认提示操作
		$(".deleteClass").click(function () {
			// 在事件的function函数中,一个this对象。这个this对象,是当前正在响应事件的dom对象。
			/**
			 * confirm是确认提示框函数
			 * 参数是它的提示内容
			 * 它两个钮,一个确认,一个是取消。
			 * 返回true表示点击了,确认,返回false表示点击取消。
			 */
			return confirm("你确认删除" + $(this).parent().parent().find("td:first").text() + "吗?");
		});
	});

</script>

5.5、修改图书功能的实现

1:图解修改图书细节

在这里插入图片描述

2、更新【修改】的请求地址

<td>${book.stock}</td>
<td><a href="manager/bookServlet?action=getBook&id=${book.id}">修改</a></td>

3、BookServlet 程序中添加 getBook 方法:

protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1 获取请求的参数图书编号
    int id = WebUtils.parseInt(req.getParameter("id"), 0);
    //2 调用bookService.queryBookById查询图书
    Book book = bookService.queryBookById(id);
    //3 保存到图书到Request域中
    req.setAttribute("book",book);
    //4 请求转发到。pages/manager/book_edit.jsp页面
    req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);

}

4、解决 book_edit.jsp 页面,即要实现添加,又要实现修改操作。

方法一:
book_manager.jsp页面:
在这里插入图片描述

book_edit.jsp页面:
在这里插入图片描述

方法二:
book_edit.jsp页面:

<form action="manager/bookServlet" method="get">
<%--				<input type="hidden" name="action" value="${param.method}">--%>
				<input type="hidden" name="action" value="${empty param.id ? "addBook" : "updateBook"}">
				<input type="hidden" name="id" value="${requestScope.book.id}">

方法三:
book_edit.jsp页面:

<input type="hidden" name="action" value="${empty requestScope.book? "addBook" : "updateBook"}">

5、在 BookServlet 程序中添加 update 方法:

protected void updateBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //        1、获取请求的参数id,图书编程
    Book book = WebUtils.copyParamToBean(req.getParameterMap(), new Book());
    //        2、调用bookService.deleteBookById();删除图书
    bookService.updateBook(book);
    //                /MyBookStore/manager/bookServlet?action=list
    resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");

}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值