diff --git a/src/com/yj/bean/Book.java b/src/com/yj/bean/Book.java index 30432c7..3f6e5c6 100644 --- a/src/com/yj/bean/Book.java +++ b/src/com/yj/bean/Book.java @@ -5,88 +5,176 @@ import java.math.BigDecimal; /** * @author yj * @create 2020-10-02 19:51 + * + * Book类表示一本书的信息,包含了书籍的基本属性,如ID、书名、作者、价格、销量、库存、分类和图片路径等。 */ public class Book { - private Integer id;//id - private String name;//姓名 - private String author;//作者 + + // 书籍的唯一标识符 + private Integer id; + + // 书籍的名称 + private String name; + + // 书籍的作者 + private String author; + + // 书籍的价格,使用BigDecimal类型以确保精度 private BigDecimal price; + + // 书籍的销量 private Integer sales; + + // 书籍的库存数量 private Integer stock; + + // 书籍的分类 private String classification; - private String imgPath="static/img/default.jpg"; + // 书籍的图片路径,默认值为"static/img/default.jpg" + private String imgPath = "static/img/default.jpg"; + + /** + * 获取书籍的分类 + * @return 书籍的分类 + */ public String getClassification() { return classification; } + /** + * 设置书籍的分类 + * @param classification 书籍的分类 + */ public void setClassification(String classification) { this.classification = classification; } - - + /** + * 获取书籍的ID + * @return 书籍的ID + */ public Integer getId() { return id; } + /** + * 设置书籍的ID + * @param id 书籍的ID + */ public void setId(Integer id) { this.id = id; } + /** + * 获取书籍的名称 + * @return 书籍的名称 + */ public String getName() { return name; } + /** + * 设置书籍的名称 + * @param name 书籍的名称 + */ public void setName(String name) { this.name = name; } + /** + * 获取书籍的作者 + * @return 书籍的作者 + */ public String getAuthor() { return author; } + /** + * 设置书籍的作者 + * @param author 书籍的作者 + */ public void setAuthor(String author) { this.author = author; } + /** + * 获取书籍的价格 + * @return 书籍的价格 + */ public BigDecimal getPrice() { return price; } + /** + * 设置书籍的价格 + * @param price 书籍的价格 + */ public void setPrice(BigDecimal price) { this.price = price; } + /** + * 获取书籍的销量 + * @return 书籍的销量 + */ public Integer getSales() { return sales; } + /** + * 设置书籍的销量 + * @param sales 书籍的销量 + */ public void setSales(Integer sales) { this.sales = sales; } + /** + * 获取书籍的库存数量 + * 如果库存数量小于0,则返回0 + * @return 书籍的库存数量 + */ public Integer getStock() { - if(stock<0) stock=0;return stock; + if (stock < 0) stock = 0; + return stock; } + /** + * 设置书籍的库存数量 + * 如果库存数量小于0,则将其设置为0 + * @param stock 书籍的库存数量 + */ public void setStock(Integer stock) { - if(stock<0) stock=0; + if (stock < 0) stock = 0; this.stock = stock; } + /** + * 获取书籍的图片路径 + * @return 书籍的图片路径 + */ public String getImgPath() { return imgPath; } + /** + * 设置书籍的图片路径 + * 如果传入的图片路径为null或空字符串,则使用默认图片路径"static/img/default.jpg" + * @param imgPath 书籍的图片路径 + */ public void setImgPath(String imgPath) { - if(imgPath==null||"".equals(imgPath)) { + if (imgPath == null || "".equals(imgPath)) { this.imgPath = "static/img/default.jpg"; } else { this.imgPath = imgPath; } } + /** + * 重写toString方法,返回书籍的详细信息 + * @return 书籍的详细信息字符串 + */ @Override public String toString() { return "Book{" + @@ -101,9 +189,23 @@ public class Book { '}'; } + /** + * 无参构造方法 + */ public Book() { } + /** + * 全参构造方法 + * @param id 书籍的ID + * @param name 书籍的名称 + * @param author 书籍的作者 + * @param price 书籍的价格 + * @param sales 书籍的销量 + * @param stock 书籍的库存数量 + * @param classification 书籍的分类 + * @param imgPath 书籍的图片路径 + */ public Book(Integer id, String name, String author, BigDecimal price, Integer sales, Integer stock, String classification, String imgPath) { this.id = id; this.name = name; @@ -114,4 +216,4 @@ public class Book { this.classification = classification; this.imgPath = imgPath; } -} +} \ No newline at end of file diff --git a/src/com/yj/dao/BookDao.java b/src/com/yj/dao/BookDao.java index 48740be..65ba631 100644 --- a/src/com/yj/dao/BookDao.java +++ b/src/com/yj/dao/BookDao.java @@ -8,34 +8,108 @@ import java.util.List; /** * @author yj * @create 2020-08-23 21:08 + * + * BookDao接口定义了对书籍数据的操作方法,包括增删改查、分页查询、按价格范围查询、按名称或作者查询等功能。 */ public interface BookDao { + /** + * 添加一本书籍到数据库 + * @param book 要添加的书籍对象 + * @return 受影响的行数,成功返回1,失败返回0 + */ public int addBook(Book book); + /** + * 根据书籍ID删除书籍 + * @param id 要删除的书籍ID + * @return 受影响的行数,成功返回1,失败返回0 + */ public int deleteBookById(Integer id); + /** + * 更新书籍信息 + * @param book 包含更新信息的书籍对象 + * @return 受影响的行数,成功返回1,失败返回0 + */ public int updateBook(Book book); + /** + * 根据书籍ID查询书籍信息 + * @param id 要查询的书籍ID + * @return 查询到的书籍对象,如果未找到返回null + */ public Book queryBookById(Integer id); + /** + * 查询所有书籍信息 + * @return 包含所有书籍的列表 + */ public List queryBooks(); + /** + * 查询所有书籍的总记录数 + * @return 所有书籍的总记录数 + */ Integer queryForPageTotalCount(); + /** + * 分页查询书籍信息 + * @param begin 分页的起始索引 + * @param pageSize 每页显示的记录数 + * @return 当前页的书籍列表 + */ List queryForPageItems(int begin, int pageSize); + /** + * 根据价格范围查询书籍的总记录数 + * @param min 价格范围的最小值 + * @param max 价格范围的最大值 + * @return 符合价格范围的书籍总记录数 + */ Integer queryForPageTotalCountByPrice(int min, int max); + /** + * 根据价格范围分页查询书籍信息 + * @param begin 分页的起始索引 + * @param pageSize 每页显示的记录数 + * @param min 价格范围的最小值 + * @param max 价格范围的最大值 + * @return 当前页的书籍列表 + */ List queryForPageItemsByPrice(int begin, int pageSize, int min, int max); + /** + * 根据书籍名称或作者查询书籍的总记录数 + * @param nameorauthor 书籍名称或作者的关键字 + * @return 符合条件的书籍总记录数 + */ Integer queryForPageTotalCountByNameOrAuthor(String nameorauthor); + /** + * 根据书籍名称或作者分页查询书籍信息 + * @param begin 分页的起始索引 + * @param pageSize 每页显示的记录数 + * @param nameorauthor 书籍名称或作者的关键字 + * @return 当前页的书籍列表 + */ List queryForPageItemsByNameOrAuthor(int begin, int pageSize, String nameorauthor); + /** + * 查询所有书籍并按某种顺序排序(如销量、价格等) + * @return 按顺序排序的书籍列表 + */ List queryForPageItemsOrder(); + /** + * 查询所有书籍的总金额(价格总和) + * @return 所有书籍的总金额 + */ BigDecimal queryTotalMoney(); + /** + * 查询书籍的总数量 + * @return 书籍的总数量 + */ public Integer queryBooknums(); -} +} \ No newline at end of file diff --git a/src/com/yj/service/BookService.java b/src/com/yj/service/BookService.java index 94a4b80..3916727 100644 --- a/src/com/yj/service/BookService.java +++ b/src/com/yj/service/BookService.java @@ -9,28 +9,84 @@ import java.util.List; /** * @author yj * @create 2020-08-24 14:40 + * + * BookService接口定义了与书籍相关的业务逻辑操作,包括书籍的增删改查、分页查询、按价格范围查询、按名称或作者查询等功能。 */ public interface BookService { + /** + * 添加一本书籍 + * @param book 要添加的书籍对象 + */ public void addBook(Book book); + /** + * 更新书籍信息 + * @param book 包含更新信息的书籍对象 + */ public void updateBook(Book book); + /** + * 根据书籍ID删除书籍 + * @param id 要删除的书籍ID + */ public void deleteBookById(Integer id); + /** + * 根据书籍ID查询书籍信息 + * @param id 要查询的书籍ID + * @return 查询到的书籍对象,如果未找到返回null + */ public Book queryBookById(Integer id); + /** + * 查询所有书籍信息 + * @return 包含所有书籍的列表 + */ public List queryBooks(); + /** + * 分页查询书籍信息 + * @param pageNo 当前页码 + * @param pageSize 每页显示的记录数 + * @return 分页对象,包含当前页的书籍列表和分页信息 + */ Page page(int pageNo, int pageSize); + /** + * 根据价格范围分页查询书籍信息 + * @param pageNo 当前页码 + * @param pageSize 每页显示的记录数 + * @param min 价格范围的最小值 + * @param max 价格范围的最大值 + * @return 分页对象,包含当前页的书籍列表和分页信息 + */ Page pageByPrice(int pageNo, int pageSize, int min, int max); + /** + * 根据书籍名称或作者分页查询书籍信息 + * @param pageNo 当前页码 + * @param pageSize 每页显示的记录数 + * @param nameOrAuthor 书籍名称或作者的关键字 + * @return 分页对象,包含当前页的书籍列表和分页信息 + */ Page pageByNameOrAuthor(int pageNo, int pageSize, String nameOrAuthor); + /** + * 查询所有书籍并按某种顺序排序(如销量、价格等) + * @return 分页对象,包含按顺序排序的书籍列表和分页信息 + */ Page pageOrder(); + /** + * 查询书籍的总数量 + * @return 书籍的总数量 + */ public Integer queryTotalBooks(); + /** + * 查询所有书籍的总金额(价格总和) + * @return 所有书籍的总金额 + */ BigDecimal queryTotalMoney(); -} +} \ No newline at end of file diff --git a/src/com/yj/test/BookDaoTest.java b/src/com/yj/test/BookDaoTest.java index 19ca13d..dd64eda 100644 --- a/src/com/yj/test/BookDaoTest.java +++ b/src/com/yj/test/BookDaoTest.java @@ -10,59 +10,102 @@ import java.math.BigDecimal; /** * @author yj * @create 2020-08-24 11:01 + * + * BookDaoTest类用于测试BookDao接口的实现类BookDaoImpl中的各个方法。 + * 通过JUnit测试框架,验证数据库操作的正确性。 */ public class BookDaoTest { + + // 创建BookDao接口的实现类BookDaoImpl对象 BookDao bookDao = new BookDaoImpl(); + /** + * 测试添加书籍的方法 + */ @Test public void addBook() { - //`name`,`author`,`classification`,`price`,`sales`,`stock`,`img_path` - //Integer id, String name, String author, BigDecimal price, Integer sales, Integer stock, String classification, String imgPath) - bookDao.addBook(new Book(null,"舌的中国","yjjj",new BigDecimal("5"),100,23,"","")); + // 创建一个新的Book对象,并调用addBook方法将其添加到数据库中 + bookDao.addBook(new Book(null, "舌的中国", "yjjj", new BigDecimal("5"), 100, 23, "", "")); } + /** + * 测试删除书籍的方法 + */ @Test public void deleteBook() { + // 调用deleteBookById方法,删除ID为3的书籍 bookDao.deleteBookById(3); } + /** + * 测试根据ID查询书籍的方法 + */ @Test public void queryById() { + // 调用queryBookById方法,查询ID为64的书籍,并打印结果 System.out.println(bookDao.queryBookById(64)); } + /** + * 测试更新书籍信息的方法 + */ @Test public void update() { - bookDao.updateBook(new Book(35,"舌尖的中国","yj",new BigDecimal("5"),100,23,"文学","")); + // 创建一个新的Book对象,并调用updateBook方法更新ID为35的书籍信息 + bookDao.updateBook(new Book(35, "舌尖的中国", "yj", new BigDecimal("5"), 100, 23, "文学", "")); } + /** + * 测试查询所有书籍的方法 + */ @Test public void queryList() { + // 调用queryBooks方法,查询所有书籍,并打印结果 System.out.println(bookDao.queryBooks()); } + /** + * 测试查询书籍总记录数的方法 + */ @Test public void queryForPageTotalCount() { + // 调用queryForPageTotalCount方法,查询所有书籍的总记录数,并打印结果 System.out.println(bookDao.queryForPageTotalCount()); } + /** + * 测试分页查询书籍的方法 + */ @Test public void queryForPageItems() { - System.out.println(bookDao.queryForPageItems(1,4)); + // 调用queryForPageItems方法,分页查询书籍,并打印结果 + System.out.println(bookDao.queryForPageItems(1, 4)); } + /** + * 测试根据价格范围查询书籍总记录数的方法 + */ @Test public void queryForPageTotalCountByPrice() { - System.out.println(bookDao.queryForPageTotalCountByPrice(10,50)); + // 调用queryForPageTotalCountByPrice方法,查询价格在10到50之间的书籍总记录数,并打印结果 + System.out.println(bookDao.queryForPageTotalCountByPrice(10, 50)); } + /** + * 测试根据价格范围分页查询书籍的方法 + */ @Test public void queryForPageItemsByPrice() { - System.out.println(bookDao.queryForPageItemsByPrice(1,4,10,50)); + // 调用queryForPageItemsByPrice方法,根据价格范围分页查询书籍,并打印结果 + System.out.println(bookDao.queryForPageItemsByPrice(1, 4, 10, 50)); } + /** + * 测试查询书籍总数量的方法 + */ @Test public void queryBooknums() { + // 调用queryBooknums方法,查询书籍的总数量,并打印结果 System.out.println(bookDao.queryBooknums()); } -} +} \ No newline at end of file diff --git a/src/com/yj/test/BookServiceTest.java b/src/com/yj/test/BookServiceTest.java index f2358b1..8ffc3ee 100644 --- a/src/com/yj/test/BookServiceTest.java +++ b/src/com/yj/test/BookServiceTest.java @@ -12,43 +12,78 @@ import java.math.BigDecimal; /** * @author yj * @create 2020-08-24 14:57 + * + * BookServiceTest类用于测试BookService接口的实现类BookServiceImpl中的各个方法。 + * 通过JUnit测试框架,验证业务逻辑的正确性。 */ public class BookServiceTest { + // 创建BookDao接口的实现类BookDaoImpl对象 private BookDao bookDao = new BookDaoImpl(); + + // 创建BookService接口的实现类BookServiceImpl对象 private BookService bookService = new BookServiceImpl(); + + /** + * 测试添加书籍的方法 + */ @Test public void addBook() { - bookDao.addBook(new Book(null,"舌尖上的中国","yj",new BigDecimal("5"),100,23,"文学","")); + // 创建一个新的Book对象,并调用addBook方法将其添加到数据库中 + bookDao.addBook(new Book(null, "舌尖上的中国", "yj", new BigDecimal("5"), 100, 23, "文学", "")); } + /** + * 测试更新书籍信息的方法 + */ @Test public void updateBook() { - bookDao.updateBook(new Book(null,"舌尖上的中国","yj",new BigDecimal("5"),100,23,"文学","")); + // 创建一个新的Book对象,并调用updateBook方法更新书籍信息 + bookDao.updateBook(new Book(null, "舌尖上的中国", "yj", new BigDecimal("5"), 100, 23, "文学", "")); } + /** + * 测试根据ID删除书籍的方法 + */ @Test public void deleteBookById() { + // 调用deleteBookById方法,删除ID为25的书籍,并打印受影响的行数 System.out.println(bookDao.deleteBookById(25)); } + /** + * 测试根据ID查询书籍的方法 + */ @Test public void queryBookById() { + // 调用queryBookById方法,查询ID为23的书籍,并打印结果 System.out.println(bookDao.queryBookById(23)); } + /** + * 测试查询所有书籍的方法 + */ @Test public void queryBooks() { + // 调用queryBooks方法,查询所有书籍,并打印结果 System.out.println(bookDao.queryBooks()); } + /** + * 测试分页查询书籍总记录数的方法 + */ @Test public void page() { + // 调用queryForPageTotalCount方法,查询所有书籍的总记录数,并打印结果 System.out.println(bookDao.queryForPageTotalCount()); } + /** + * 测试查询所有书籍的总金额的方法 + */ @Test public void queryTotalMoney() { + // 调用queryTotalMoney方法,查询所有书籍的总金额,并打印结果 System.out.println(bookDao.queryTotalMoney()); } } \ No newline at end of file diff --git a/src/com/yj/web/BaseServlet.java b/src/com/yj/web/BaseServlet.java index 39a2021..1c5e289 100644 --- a/src/com/yj/web/BaseServlet.java +++ b/src/com/yj/web/BaseServlet.java @@ -10,26 +10,54 @@ import java.lang.reflect.Method; /** * @author yj * @create 2020-08-23 16:51 + * + * BaseServlet类是一个抽象的Servlet基类,用于简化Servlet的开发。 + * 它通过反射机制动态调用子类中的方法,避免了在每个Servlet中重复编写doGet和doPost方法。 */ public abstract class BaseServlet extends HttpServlet { + /** + * 处理GET请求,直接调用doPost方法 + * @param req HttpServletRequest对象 + * @param resp HttpServletResponse对象 + * @throws ServletException + * @throws IOException + */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - doPost(req,resp); + doPost(req, resp); } + /** + * 处理POST请求,通过反射机制动态调用子类中的方法 + * @param req HttpServletRequest对象 + * @param resp HttpServletResponse对象 + * @throws ServletException + * @throws IOException + */ + @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - //解决post请求中文乱码 + // 解决POST请求中文乱码问题 req.setCharacterEncoding("utf-8"); - //解决相应的中文乱码 + + // 解决响应的中文乱码问题 resp.setContentType("text/html;charset=UTF-8"); + + // 获取请求参数action,该参数用于指定要调用的方法名 String action = req.getParameter("action"); + try { - Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class,HttpServletResponse.class); - method.invoke(this,req,resp); + // 通过反射获取当前类中指定名称的方法 + Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); + + // 调用方法,传入请求和响应对象 + method.invoke(this, req, resp); } catch (Exception e) { + // 捕获异常并打印堆栈信息 e.printStackTrace(); + + // 将异常包装为运行时异常抛出,便于上层处理 throw new RuntimeException(e); } } -} +} \ No newline at end of file diff --git a/src/com/yj/web/BookServlet.java b/src/com/yj/web/BookServlet.java index 0688f86..b498d62 100644 --- a/src/com/yj/web/BookServlet.java +++ b/src/com/yj/web/BookServlet.java @@ -15,72 +15,137 @@ import java.util.List; /** * @author yj * @create 2020-08-24 15:25 + * + * BookServlet类继承自BaseServlet,用于处理与书籍相关的请求。 + * 通过调用BookService接口的实现类BookServiceImpl,完成书籍的增删改查、分页查询等操作。 */ public class BookServlet extends BaseServlet { + // 创建BookService接口的实现类BookServiceImpl对象 private BookService bookService = new BookServiceImpl(); + /** + * 处理添加书籍的请求 + * @param req HttpServletRequest对象 + * @param resp HttpServletResponse对象 + * @throws ServletException + * @throws IOException + */ protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),0); - pageNo+=1; - Book book = (Book) WebUtils.copyParamToBean(req.getParameterMap(),new Book()); + // 获取当前页码,默认从0开始 + int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 0); + // 页码加1,表示添加书籍后跳转到下一页 + pageNo += 1; + + // 将请求参数封装到Book对象中 + Book book = (Book) WebUtils.copyParamToBean(req.getParameterMap(), new Book()); + + // 调用BookService的addBook方法添加书籍 bookService.addBook(book); - //req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp); - resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo="+pageNo); - } + // 重定向到书籍管理页面,并跳转到添加书籍后的页码 + resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + pageNo); + } + /** + * 处理删除书籍的请求 + * @param req HttpServletRequest对象 + * @param resp HttpServletResponse对象 + * @throws ServletException + * @throws IOException + */ protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String id = req.getParameter("id"); - int i = Integer.parseInt(id); - bookService.deleteBookById(i); - resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo="+req.getParameter("pageNo")); - } + // 获取要删除的书籍ID + String id = req.getParameter("id"); + int i = Integer.parseInt(id); + // 调用BookService的deleteBookById方法删除书籍 + bookService.deleteBookById(i); + // 重定向到书籍管理页面,并保持当前页码 + resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo")); + } + + /** + * 处理更新书籍的请求 + * @param req HttpServletRequest对象 + * @param resp HttpServletResponse对象 + * @throws ServletException + * @throws IOException + */ protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - Book book = (Book) WebUtils.copyParamToBean(req.getParameterMap(),new Book()); + // 将请求参数封装到Book对象中 + Book book = (Book) WebUtils.copyParamToBean(req.getParameterMap(), new Book()); + + // 调用BookService的updateBook方法更新书籍 bookService.updateBook(book); - resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo="+req.getParameter("pageNo")); + + // 重定向到书籍管理页面,并保持当前页码 + resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNo=" + req.getParameter("pageNo")); } /** - * - * @param req - * @param resp + * 处理获取单个书籍信息的请求 + * @param req HttpServletRequest对象 + * @param resp HttpServletResponse对象 * @throws ServletException * @throws IOException */ protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + // 获取要查询的书籍ID String id = req.getParameter("id"); int i = Integer.parseInt(id); + + // 调用BookService的queryBookById方法查询书籍 Book book = bookService.queryBookById(i); - req.setAttribute("book",book); - req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp); - } + // 将查询到的书籍信息保存到request域中 + req.setAttribute("book", book); + // 请求转发到书籍编辑页面 + req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req, resp); + } + + /** + * 处理查询所有书籍的请求 + * @param req HttpServletRequest对象 + * @param resp HttpServletResponse对象 + * @throws ServletException + * @throws IOException + */ protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - //1、通过BookService查询数据 - Listbooks = bookService.queryBooks(); - //2、将数据保存在request域中 - req.setAttribute("books",books); - //3、请求转发到pages/manager/book_manager.jsp - req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp); + // 调用BookService的queryBooks方法查询所有书籍 + List books = bookService.queryBooks(); + + // 将查询到的书籍列表保存到request域中 + req.setAttribute("books", books); + + // 请求转发到书籍管理页面 + req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req, resp); } + /** + * 处理分页查询书籍的请求 + * @param req HttpServletRequest对象 + * @param resp HttpServletResponse对象 + * @throws ServletException + * @throws IOException + */ protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - //1、获取请求的参数pageNo和pageSize - int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),1); + // 获取请求参数pageNo和pageSize + int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1); int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE); - //2、调用BookService.page(pageNo,pageSize)方法:返回page对象 - Page page = bookService.page(pageNo,pageSize); + // 调用BookService的page方法进行分页查询 + Page page = bookService.page(pageNo, pageSize); + + // 设置分页请求的URL page.setUrl("manager/bookServlet?action=page"); - //3、保存Page对象到request域中 - req.setAttribute("page",page); - //4、请求转发到page/manager/book_manager.jsp页面 - req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp); + // 将分页对象保存到request域中 + req.setAttribute("page", page); + + // 请求转发到书籍管理页面 + req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req, resp); } -} +} \ No newline at end of file diff --git a/web/pages/client/index.jsp b/web/pages/client/index.jsp index 7ecae77..79b2494 100644 --- a/web/pages/client/index.jsp +++ b/web/pages/client/index.jsp @@ -16,18 +16,18 @@ <%@include file="/pages/common/header.jsp"%> @@ -35,25 +35,27 @@ Bookstore
+ - + 登录 | 注册    热榜 - + 欢迎${sessionScope.user.username}光临书城 我的订单 个人信息 注销   - + 购物车 后台管理
+
@@ -62,6 +64,7 @@
+
@@ -71,6 +74,7 @@
+
@@ -78,13 +82,16 @@
+ 您的购物车中有${sessionScope.cart.totalCount}件商品
+ 您刚刚将${sessionScope.lastName}加入到了购物车中
+
@@ -112,6 +119,7 @@ ${book.stock}
+
@@ -120,10 +128,12 @@
+ <%@include file="/pages/common/page_nav.jsp"%>
+ <%@include file="/pages/common/footer.jsp"%> - + \ No newline at end of file diff --git a/web/pages/common/header.jsp b/web/pages/common/header.jsp index 32ef403..9d25d1d 100644 --- a/web/pages/common/header.jsp +++ b/web/pages/common/header.jsp @@ -7,17 +7,27 @@ --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% - String basePath = request.getScheme() - +"://" - +request.getServerName() - +":" - +request.getServerPort() - +request.getContextPath() - +"/"; - pageContext.setAttribute("bastPath",basePath); + // 获取当前请求的协议(如http或https) + String scheme = request.getScheme(); + // 获取服务器的主机名或IP地址 + String serverName = request.getServerName(); + // 获取服务器的端口号 + int serverPort = request.getServerPort(); + // 获取当前应用的上下文路径 + String contextPath = request.getContextPath(); + // 拼接basePath,用于构建项目的根路径 + String basePath = scheme + "://" + serverName + ":" + serverPort + contextPath + "/"; + + // 将basePath存储到pageContext中,方便在页面中使用 + pageContext.setAttribute("basePath", basePath); %> + -> - - + + + + + + + \ No newline at end of file diff --git a/web/pages/common/page_nav.jsp b/web/pages/common/page_nav.jsp index b719bb4..52246d0 100644 --- a/web/pages/common/page_nav.jsp +++ b/web/pages/common/page_nav.jsp @@ -8,71 +8,82 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %>