1.5、编写图书模块的Web层,和页面联调测试
1.5.1、图书列表功能的实现
1、图解列表流程
注意访问顺序 首页–》后台管理–》图书管理,不能直接访问图书管理,无数据
2 BookServlet web包下
package com.atguigu.web; import com.atguigu.pojo.Book; import com.atguigu.service.BookService; import com.atguigu.service.impl.BookServiceImpl; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class BookServlet extends BaseServlet { private BookService bookService=new BookServiceImpl(); protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } 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.xml下配置
<servlet> <servlet-name>BookServlet</servlet-name> <servlet-class>com.atguigu.web.BookServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>BookServlet</servlet-name> <url-pattern>/manager/bookServlet</url-pattern><!-- /manager方便管理 --> </servlet-mapping>
3 修改book_manager.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/21 Time: 下午 02:47 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>图书管理</title> <%--静态包含 base标签,css样式,jquery文件 --%> <%@ include file="/pages/common/head.jsp"%> </head> <body> <div id="header"> <img class="logo_img" alt="" src="../../static/img/logo.gif"> <span class="wel_word">图书管理系统</span> <%-- 静态包含manager 管理模块的菜单 --%> <%@ include file="/pages/common/manager_menu.jsp"%> </div> <div id="main"> <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.name}</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> </div> <%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%> </body> </html>
4 修改manager_menu.jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/21 Time: 下午 05:38 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <div> <a href="manager/bookServlet?action=list">图书管理</a> <a href="order_manager.jsp">订单管理</a> <a href="../../index.jsp">返回商城</a> </div>
增加语句 BaseServlet
package com.atguigu.web; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Method; public abstract class BaseServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action=req.getParameter("action"); // System.out.println(action); //action的value和调用的方法名是统一的 // if ("login".equals(action)){ System.out.println("处理登录的需求"); // login(req,resp); // }else if ("regist".equals(action)){ System.out.println("处理注册的需求"); // regist(req,resp); // } //反射 try { //获取action业务鉴别字符串,获取相应的业务方法 反射对象 Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class); //调用目标业务方法 method.invoke(this,req,resp); } catch (Exception e) { e.printStackTrace(); } } }
1.5.2、前后台的简单介绍
1.5.3、添加图书功能的实现
修改 book_edit.jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/21 Time: 下午 02:46 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>编辑图书</title> <%--静态包含 base标签,css样式,jquery文件 --%> <%@ include file="/pages/common/head.jsp"%> <style type="text/css"> h1 { text-align: center; margin-top: 200px; } h1 a{ color:red; } input { text-align: center; } </style> <body> <div id="header"> <img class="logo_ing" alt="" arc="../../static/1mg/logo.gif"> <span class="wel_word">编辑图书</span> <%-- 静态包含manager 管理模块的菜单 --%> <%@ include file="/pages/common/manager_menu.jsp"%> </div> <div id="main"> <form action="manager/bookServlet" method="get"> <input type="hidden" name="action" value="add"/> <table> <tr> <td>名称</td> <td>价格</td> <td>作者</td> <td>销量</td> <td>库存</td> <td colspan="2">操作</td> </tr> <tr> <td><input name="name" type="text" value="时间简史"/></td> <td><input name="price" type="text" value="30.00"/></td> <td><input name="author" type="text" value="霍金"/></td> <td><input name="sales" type="text" value="200"/></td> <td><input name="stock" type="text" value="300"/></td> <td><input type= "submit" value="提交"/></td> </tr> </table> </form> </div> <%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%> </body> </html>
增加语句 BookServlet
package com.atguigu.web; import com.atguigu.pojo.Book; import com.atguigu.service.BookService; import com.atguigu.service.impl.BookServiceImpl; import com.atguigu.utils.WebUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class BookServlet extends BaseServlet { private BookService bookService=new BookServiceImpl(); protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数==封装成为Book对象 Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book()); // 2、调用BookService.addBook0保存图书 bookService.addBook(book); // 3、跳到图书列表页面 // /manager/bookServlet?action=list // req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);//请求转发有bug resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");//重定向 } protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } 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); } }
1.5.4、删除图书功能的实现
修改 book_manager.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/21 Time: 下午 02:47 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>图书管理</title> <%--静态包含 base标签,css样式,jquery文件 --%> <%@ include file="/pages/common/head.jsp"%> <script type="text/javascript"> //给删除的a标签绑定单击事件,用于删除的确认提示操作 $(function (){ $("a.deleteClass").click(function (){ // 在事件的fuction函数中,有一个this对象。这个this对象,是当前正在响应事件的dom对象。 /** * confirm是确认提示框函数 * 参数是它的提示内容 * 他有两个按钮,一个确认,一个是取消。 * 返回true表示点击了,确认,返回false表示点击取消。 */ return confirm("你确定要删除【"+$(this).parent().parent().find("td:first").text()+"】?"); // return false;//阻止元素的默认行为===不提交请求 }); }); </script> </head> <body> <div id="header"> <img class="logo_img" alt="" src="../../static/img/logo.gif"> <span class="wel_word">图书管理系统</span> <%-- 静态包含manager 管理模块的菜单 --%> <%@ include file="/pages/common/manager_menu.jsp"%> </div> <div id="main"> <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.name}</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 class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}">删除</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> </div> <%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%> </body> </html>
增加语句 WebUtils
package com.atguigu.utils; import org.apache.commons.beanutils.BeanUtils; import java.util.Map; public class WebUtils { /** * 把Map中的值注入到对应的JavaBean属性中 * @param value * @param bean * * HttpServletRequest * Dao层 * Service层 * web层 耦合度高 * */ // public static void copyParamToBean(HttpServletRequest req,Object bean ){ public static <T> T copyParamToBean(Map value, T bean ){ try { System.out.println("注入之前:"+bean); /** * 把所有请求的参数都注入到user对象中 */ BeanUtils.populate(bean,value);//出现NoClassDefFoundError错误导入commons-collections3.x.jar,4.x不行 System.out.println("注入之后:"+bean); } catch (Exception e) { e.printStackTrace(); } return bean; } /** * 将字符串转换成为int类型的数据 * @param strInt * @param defaultValue * @return */ public static int parseInt(String strInt,int defaultValue){ try { return Integer.parseInt(strInt); } catch (Exception e) { e.printStackTrace(); } return defaultValue; } }
增加语句 BookServlet
package com.atguigu.web; import com.atguigu.pojo.Book; import com.atguigu.service.BookService; import com.atguigu.service.impl.BookServiceImpl; import com.atguigu.utils.WebUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class BookServlet extends BaseServlet { private BookService bookService=new BookServiceImpl(); protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数==封装成为Book对象 Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book()); // 2、调用BookService.addBook0保存图书 bookService.addBook(book); // 3、跳到图书列表页面 // /manager/bookServlet?action=list // req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);//请求转发有bug resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");//重定向 } protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数id,图书编程 int id=WebUtils.parseInt(req.getParameter("id"),0); // 2、调用bookService.deleteBookById();删除图书 bookService.deleteBookById(id); // 3、重定向回图书列表管理页西 // /book/manager/bookServlet?action=list resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list"); } protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } 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); } }
1.5.5、修改图书信息
第一步 回显修改的信息
修改 book_manager.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/21 Time: 下午 02:47 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>图书管理</title> <%--静态包含 base标签,css样式,jquery文件 --%> <%@ include file="/pages/common/head.jsp"%> <script type="text/javascript"> //给删除的a标签绑定单击事件,用于删除的确认提示操作 $(function (){ $("a.deleteClass").click(function (){ // 在事件的fuction函数中,有一个this对象。这个this对象,是当前正在响应事件的dom对象。 /** * confirm是确认提示框函数 * 参数是它的提示内容 * 他有两个按钮,一个确认,一个是取消。 * 返回true表示点击了,确认,返回false表示点击取消。 */ return confirm("你确定要删除【"+$(this).parent().parent().find("td:first").text()+"】?"); // return false;//阻止元素的默认行为===不提交请求 }); }); </script> </head> <body> <div id="header"> <img class="logo_img" alt="" src="../../static/img/logo.gif"> <span class="wel_word">图书管理系统</span> <%-- 静态包含manager 管理模块的菜单 --%> <%@ include file="/pages/common/manager_menu.jsp"%> </div> <div id="main"> <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.name}</td> <td>${book.price}</td> <td>${book.author}</td> <td>${book.sales}</td> <td>${book.stock}</td> <td><a href="manager/bookServlet?action=getBook&id=${book.id}">修改</a> </td> <td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}">删除</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> </div> <%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%> </body> </html>
修改 book_edit.jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/21 Time: 下午 02:46 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>编辑图书</title> <%--静态包含 base标签,css样式,jquery文件 --%> <%@ include file="/pages/common/head.jsp"%> <style type="text/css"> h1 { text-align: center; margin-top: 200px; } h1 a{ color:red; } input { text-align: center; } </style> <body> <div id="header"> <img class="logo_ing" alt="" arc="../../static/1mg/logo.gif"> <span class="wel_word">编辑图书</span> <%-- 静态包含manager 管理模块的菜单 --%> <%@ include file="/pages/common/manager_menu.jsp"%> </div> <div id="main"> <form action="manager/bookServlet" method="get"> <input type="hidden" name="action" value="add"/> <table> <tr> <td>名称</td> <td>价格</td> <td>作者</td> <td>销量</td> <td>库存</td> <td colspan="2">操作</td> </tr> <tr> <td><input name="name" type="text" value="${requestScope.book.name}"/></td> <td><input name="price" type="text" value="${requestScope.book.price}"/></td> <td><input name="author" type="text" value="${requestScope.book.author}"/></td> <td><input name="sales" type="text" value="${requestScope.book.sales}"/></td> <td><input name="stock" type="text" value="${requestScope.book.stock}"/></td> <td><input type= "submit" value="提交"/></td> </tr> </table> </form> </div> <%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%> </body> </html>
增加语句 BookServlet
package com.atguigu.web; import com.atguigu.pojo.Book; import com.atguigu.service.BookService; import com.atguigu.service.impl.BookServiceImpl; import com.atguigu.utils.WebUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class BookServlet extends BaseServlet { private BookService bookService=new BookServiceImpl(); protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数==封装成为Book对象 Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book()); // 2、调用BookService.addBook0保存图书 bookService.addBook(book); // 3、跳到图书列表页面 // /manager/bookServlet?action=list // req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);//请求转发有bug resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");//重定向 } protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数id,图书编程 int id=WebUtils.parseInt(req.getParameter("id"),0); // 2、调用bookService.deleteBookById();删除图书 bookService.deleteBookById(id); // 3、重定向回图书列表管理页西 // /book/manager/bookServlet?action=list resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list"); } protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } 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); } 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); } }
第二步 提交给服务器保存修改
修改 book_manager.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/21 Time: 下午 02:47 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>图书管理</title> <%--静态包含 base标签,css样式,jquery文件 --%> <%@ include file="/pages/common/head.jsp"%> <script type="text/javascript"> //给删除的a标签绑定单击事件,用于删除的确认提示操作 $(function (){ $("a.deleteClass").click(function (){ // 在事件的fuction函数中,有一个this对象。这个this对象,是当前正在响应事件的dom对象。 /** * confirm是确认提示框函数 * 参数是它的提示内容 * 他有两个按钮,一个确认,一个是取消。 * 返回true表示点击了,确认,返回false表示点击取消。 */ return confirm("你确定要删除【"+$(this).parent().parent().find("td:first").text()+"】?"); // return false;//阻止元素的默认行为===不提交请求 }); }); </script> </head> <body> <div id="header"> <img class="logo_img" alt="" src="../../static/img/logo.gif"> <span class="wel_word">图书管理系统</span> <%-- 静态包含manager 管理模块的菜单 --%> <%@ include file="/pages/common/manager_menu.jsp"%> </div> <div id="main"> <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.name}</td> <td>${book.price}</td> <td>${book.author}</td> <td>${book.sales}</td> <td>${book.stock}</td> <td><a href="manager/bookServlet?action=getBook&id=${book.id}">修改</a> </td> <%-- <td><a href="manager/bookServlet?action=getBook&id=${book.id}&method=update">修改</a> </td> <!---方案一 ---> --%> <td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}">删除</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> <%-- <td><a href="pages/manager/book_edit.jsp?method=add">添加图书</a> </td> <!---方案一 ---> --%> </tr> </table> </div> <%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%> </body> </html>
修改 book_edit.jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/21 Time: 下午 02:46 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>编辑图书</title> <%--静态包含 base标签,css样式,jquery文件 --%> <%@ include file="/pages/common/head.jsp"%> <style type="text/css"> h1 { text-align: center; margin-top: 200px; } h1 a{ color:red; } input { text-align: center; } </style> <body> <%-- 是否添加操作:${empty param.id?"add":"update"} <!---方案二 ---> --%> <%-- 是否添加操作:${empty requestScope.book?"add":"update"} <!---方案三 ---> --%> <div id="header"> <img class="logo_ing" alt="" arc="../../static/1mg/logo.gif"> <span class="wel_word">编辑图书</span> <%-- 静态包含manager 管理模块的菜单 --%> <%@ include file="/pages/common/manager_menu.jsp"%> </div> <div id="main"> <form action="manager/bookServlet" method="get"> <%-- <input type="hidden" name="action" value="add"/> --%> <%-- <input type="hidden" name="action" value="${param.method}"/> <!---方案一 ---> --%> <%-- <input type="hidden" name="action" value="${empty param.id?"add":"update"}"/> <!---方案二 ---> --%> <input type="hidden" name="action" value="${empty requestScope.book?"add":"update"}"/><!---方案三 ---> <input type="hidden" name="id" value="${requestScope.book.id}"/> <table> <tr> <td>名称</td> <td>价格</td> <td>作者</td> <td>销量</td> <td>库存</td> <td colspan="2">操作</td> </tr> <tr> <td><input name="name" type="text" value="${requestScope.book.name}"/></td> <td><input name="price" type="text" value="${requestScope.book.price}"/></td> <td><input name="author" type="text" value="${requestScope.book.author}"/></td> <td><input name="sales" type="text" value="${requestScope.book.sales}"/></td> <td><input name="stock" type="text" value="${requestScope.book.stock}"/></td> <td><input type= "submit" value="提交"/></td> </tr> </table> </form> </div> <%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%> </body> </html>
增加语句 BookServlet
package com.atguigu.web; import com.atguigu.pojo.Book; import com.atguigu.service.BookService; import com.atguigu.service.impl.BookServiceImpl; import com.atguigu.utils.WebUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class BookServlet extends BaseServlet { private BookService bookService=new BookServiceImpl(); protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数==封装成为Book对象 Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book()); // 2、调用BookService.addBook0保存图书 bookService.addBook(book); // 3、跳到图书列表页面 // /manager/bookServlet?action=list // req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);//请求转发有bug resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");//重定向 } protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数id,图书编程 int id=WebUtils.parseInt(req.getParameter("id"),0); // 2、调用bookService.deleteBookById();删除图书 bookService.deleteBookById(id); // 3、重定向回图书列表管理页西 // /book/manager/bookServlet?action=list resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list"); } protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数==封装成为Book对象 Book book=WebUtils.copyParamToBean(req.getParameterMap(),new Book()); // 2、调用BookService.updateBook( book);修改图书 bookService.updateBook(book); // 3、重定向回图书列表管理页面 // 地址:/工程名/manager/bookServlet?action=list resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list"); } 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); } 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); } }





