一. 编写页面对应的JavaBean对象

在pojo包下创建Page类

package server.pojo;import java.util.List;public class Page<T> {public static final Integer PAGE_SIZE = 2;private Integer pageNumber;private Integer pageTotalNumber;private Integer pageSize = PAGE_SIZE;private Integer dataTotalCount;private List<T> items;public Integer getPageNumber() {return pageNumber;}public void setPageNumber(Integer pageNumber) {//防止跳到不在页码数范围内的其他页码if(pageNumber < 1){pageNumber = 1;}if(pageNumber > pageTotalNumber){pageNumber = pageTotalNumber;}this.pageNumber = pageNumber;}public Integer getPageTotalNumber() {return pageTotalNumber;}public void setPageTotalNumber(Integer pageTotalNumber) {this.pageTotalNumber = pageTotalNumber;}public Integer getPageSize() {return pageSize;}public void setPageSize(Integer pageSize) {this.pageSize = pageSize;}public Integer getDataTotalCount() {return dataTotalCount;}public void setDataTotalCount(Integer dataTotalCount) {this.dataTotalCount = dataTotalCount;}public List<T> getItems() {return items;}public void setItems(List<T> items) {this.items = items;}@Overridepublic String toString() {return "Page{" +"pageNumber=" + pageNumber +", pageTotalNumber=" + pageTotalNumber +", pageSize=" + pageSize +", dataTotalCount=" + dataTotalCount +", items=" + items +'}';}
}

二. Dao层

1. 在BookDao接口中添加以下两个方法

public Integer queryDataTotalCount();public List<Book> queryPageItems(int begin, int pageSize);

2.在BookDaoImpl中实现上述接口中的两个方法

    @Overridepublic Integer queryDataTotalCount() {String sql = "select count(*) from book";Number count = (Number) querySingleValue(sql);return count.intValue();}@Overridepublic List<Book> queryPageItems(int begin, int pageSize) {String sql = "select * from book limit ?,?";return queryList(Book.class,sql,begin,pageSize);}

三. Service层

1. 在BookService接口中添加以下方法

public Page<Book> page(int pageNumber, int pageSize);

2. 在BookServiceImpl中实现上述接口中的方法

    @Overridepublic Page<Book> page(int pageNumber, int pageSize) {Page<Book> page = new Page<>();//设置每页显示的数量page.setPageSize(pageSize);//求总的记录数Integer dataTotalCount = bookDao.queryDataTotalCount();//设置总记录数page.setDataTotalCount(dataTotalCount);//求总页码数Integer pageTotalNumber = dataTotalCount / pageSize;if(dataTotalCount % pageSize > 0){pageTotalNumber += 1;}//设置总页码数page.setPageTotalNumber(pageTotalNumber);//设置当前页码page.setPageNumber(pageNumber);//求当前页数据的开始索引int begin = (page.getPageNumber() - 1) * pageSize;//求当前页的数据List<Book> items = bookDao.queryPageItems(begin,pageSize);//设置当前页的每一个数据page.setItems(items);return page;}

四. Web层

1.①在BookServlet中添加page方法,进行分页显示;②需要将删除、添加、修改方法里重定向的地址改为page,这样对其进行操作后才能够显示出来;③执行完添加操作后,需要显示最后一页,这样才能看到添加后的数据;④执行完删除操作后,需要跳到删除完之后的那一页,可以看到已经被删除;⑤修改完数据之后,需要显示被修改数据的那一页,可以看到已经被修改

package server.web;import server.pojo.Book;
import server.pojo.Page;
import server.service.BookService;
import server.service.impl.BookServiceImpl;
import server.utils.WebUtils;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;@WebServlet("/manager/bookServlet")
public class BookServlet extends BaseServlet{private BookService bookService = new BookServiceImpl();protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//通过BookService查询全部书List<Book> books = bookService.queryBooks();//把全部图书保存到Request域中req.setAttribute("books",books);//请求转发到/pages/manager/book_manager.jsp页面req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);}protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求的idString id = req.getParameter("id");//调用BookService类的deleteBookById()方法删除对应的图书bookService.deleteBookById(Integer.parseInt(id));//重定向到图书列表页面resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNumber="+req.getParameter("pageNumber"));}protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int pageNumber = WebUtils.parseInt(req.getParameter("pageNumber"),0);pageNumber += 1;//获取请求的参数Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());//调用BookService类的addBook()方法保存图书bookService.addBook(book);//重定向到图书列表页面resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNumber="+pageNumber);}protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求的参数(图书id)String id = req.getParameter("id");//调用BookService类的queryBookById()方法查询图书Book book = bookService.queryBookById(Integer.parseInt(id));//保存图书到Request作用域中req.setAttribute("book",book);//请求转发到/pages/manager/book_edit.jsp页面req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);}protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求的参数Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());//调用BookService类的updateBook()方法修改图书信息bookService.updateBook(book);//重定向到图书列表页面resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=page&pageNumber="+req.getParameter("pageNumber"));}protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求的参数pageNumber和pageSizeint pageNumber = WebUtils.parseInt(req.getParameter("pageNumber"),1);int pageSize = WebUtils.parseInt(req.getParameter("pageSize"),Page.PAGE_SIZE);//调用BookService类的Page(pageNumber,pageSize)方法Page<Book> page = bookService.page(pageNumber,pageSize);//保存Page对象到Request域中req.setAttribute("page",page);//重定向到/pages/manager/book_manager.jsp页面req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);}
}

在WebUtils下添加如下方法,将字符串转化成整数

    public static int parseInt(String strInt,int defaultValue){try {return Integer.parseInt(strInt);} catch (Exception e) {e.printStackTrace();}return defaultValue;}

2. 修改前端页面

①修改manager.jsp页面,将地址指向BookServlet中的page方法

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>后台管理</title><base href="http://localhost:8080/StudyProject_war_exploded/">
</head>
<body>
<div><h1>欢迎管理员进入后台管理系统</h1><a href="manager/bookServlet?action=page">图书管理</a><a href="index.jsp">返回首页</a>
</div>
</body>
</html>

②修改book_manager.jsp页面,来分页显示数据,并且可以执行上一页,下一页,跳到指定页码

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><%    //获取当前工程的路径String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";%><base href="<%=basePath%>"><title>图书管理</title>
</head>
<body><div align="center">图书管理系统</div><table border = "1" width = "600" height = "300" cellspacing = "0" cellpadding = "10" align="center"><tr align = "center" ><td>名称</td><td>价格</td><td>作者</td><td>销量</td><td>库存</td><td colspan="2">操作</td></tr><c:forEach items="${requestScope.page.items}" var="book"><tr align = "center"><td>${book.bookname}</td><td>${book.price}</td><td>${book.author}</td><td>${book.sale}</td><td>${book.stock}</td><td><a href="manager/bookServlet?action=getBook&id=${book.id}&method=update&pageNumber=${requestScope.page.pageNumber}">修改</a></td><td><a href="manager/bookServlet?action=delete&id=${book.id}&pageNumber=${requestScope.page.pageNumber}" onclick="return (confirm('确定删除吗?'));">删除</a></td></tr></c:forEach><tr align = "right"><td colspan="7"><a href="pages/manager/book_edit.jsp?method=add&pageNumber=${requestScope.page.pageTotalNumber}">添加图书</a></td></tr></table><div align="center"><%-- 如果当前页面是第一页,则不显示首页和上一页 --%><c:if test="${requestScope.page.pageNumber > 1}"><a href = "manager/bookServlet?action=page&pageNumber=1">首页</a><a href = "manager/bookServlet?action=page&pageNumber=${requestScope.page.pageNumber-1}">上一页</a></c:if><%-- 页码输出的开始 --%><c:choose><%-- 情况1:如果总页码小于等于3,则显示页码的范围是:1 —— 总页码数 --%><c:when test="${requestScope.page.pageTotalNumber <= 3}"><c:set var="begin" value="1"/><c:set var="end" value="${requestScope.page.pageTotalNumber}"/></c:when><%-- 情况2:如果总页码大于3 --%><c:when test="${requestScope.page.pageTotalNumber > 3}"><c:choose><%-- 情况2.1:如果当前页码为前两页时,则显示页码的范围是:1 —— 3 --%><c:when test="${requestScope.page.pageNumber <= 2}"><c:set var="begin" value="1"/><c:set var="end" value="3"/></c:when><%-- 情况2.2:如果当前页码为最后两页时,则显示页码的范围是:总页数减2 —— 最后一页 --%><c:when test="${requestScope.page.pageNumber >= requestScope.page.pageTotalNumber-2}"><c:set var="begin" value="${requestScope.page.pageTotalNumber-2}"/><c:set var="end" value="${requestScope.page.pageTotalNumber}"/></c:when><%-- 情况2.3:如果当前页码为其他页码时,则显示页码的范围是:当前页码减1 —— 当前页码加1 --%><c:otherwise><c:set var="begin" value="${requestScope.page.pageNumber-1}"/><c:set var="end" value="${requestScope.page.pageNumber+1}"/></c:otherwise></c:choose></c:when></c:choose><c:forEach begin="${begin}" end="${end}" var="i"><c:if test="${i == requestScope.page.pageNumber}">【${i}】</c:if><c:if test="${i != requestScope.page.pageNumber}"><a href="manager/bookServlet?action=page&pageNumber=${i}">${i}</a></c:if></c:forEach><%-- 页码输出的结束  --%><%-- 如果当前页面已经是最后一页,则不显示下一页和末页 --%><c:if test="${requestScope.page.pageNumber < requestScope.page.pageTotalNumber}"><a href = "manager/bookServlet?action=page&pageNumber=${requestScope.page.pageNumber+1}">下一页</a><a href = "manager/bookServlet?action=page&pageNumber=${requestScope.page.pageTotalNumber}">末页</a></c:if>共${requestScope.page.pageTotalNumber}页,${requestScope.page.dataTotalCount}条记录,到第<input value="${param.pageNumber}" id="page_input">页<input type="button" value="确定" onclick="location.href='manager/bookServlet?action=page&pageNumber='+document.getElementById('page_input').value"><!--location.href表示链接的路径,document.getElementById('page_input').value表示获取输入框中的内容--></div>
</body>
</html>

②修改book_edit.jsp页面,来显示执行完添加、修改、删除操作后对应的页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>编辑图书</title><base href="http://localhost:8080/StudyProject_war_exploded/">
</head>
<body><div align="center">编辑图书</div><div align="center"><form action="manager/bookServlet" method="post"><input type="hidden" name="action" value="${param.method}"><input type="hidden" name="pageNumber" value="${param.pageNumber}"><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 type="text" name="bookname" value="${requestScope.book.bookname}"/></td><td><input type="text" name="price" value="${requestScope.book.price}"/></td><td><input type="text" name="author" value="${requestScope.book.author}"/></td><td><input type="text" name="sale" value="${requestScope.book.sale}"/></td><td><input type="text" name="stock" value="${requestScope.book.stock}"/></td><td><input type="submit" value="提交"/></td></tr>   </table></form></div>
</body>
</html>

项目学习 —— 图书后台内容分页显示相关推荐

  1. 文章,记录按内容分页显示,根据文章内容按字数进行分页(转)

    在很多时候我们对一些文章很长时,往往浏览时用鼠标滑来滑去非常麻烦.要是我们对这篇文章划分为几个 页面,用不同的面页去浏览不但看起来很爽,而且效率方面也是大的提高了. 下面是一段代码,给大家做个参考: ...

  2. 项目学习 —— 图书商城后台管理

    查询.修改.删除数据库中数据. 一. 创建数据库和表 在数据库studyproject下创建一个book表 CREATE TABLE `studyproject`.`book` (`id` INT N ...

  3. mysql 删除数据 分页_PHP实现对mysql数据库内容分页显示

    在写列表页读数据的时候往往要写上一个分页代码,小编研究了很久,也搜索了很多东西,最后总结出了以下分页代码,有需要的朋友可以研究研究 /**********分页开始**********/ $pageSi ...

  4. php5.6版本帝国cms后台内容不显示,帝国cms后台编辑器显示不完整无法操作的处理方法...

    国内网产建设门槛变低,功劳应该是些这些网站建站系统,如最热的织梦cms(dedecms),有优企业服务的phpcms,还有小众但是安全的帝国cms, 当然还有论坛建站系统,phpwind和Discuz ...

  5. 文章内容分页功能实现

    文章内容分页,一篇文章内容过长,我们考虑内容分页显示.对于这个要求,得先从数据库设计角度来说,应该是一对多的关系.因此你需要设计两张表来存储文章的信息,第一张是基本的,如标题,摘要,作者等字段.另一个 ...

  6. Eclipse搭建SSH环境实现Struts2分页显示mysql数据库表中内容

    2019独角兽企业重金招聘Python工程师标准>>> 摘要 学习(Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程),尝试搭建ssh框架 ...

  7. java 前台播放视频_「纯js项目」海康视频项目,java后台+前台web显示的,望提供思路!...

    纯js项目: 海康视频项目,java后台+前台web显示的,望提供思路! 如果只是实现BS架构,可以向海康要web开发包,直接使用浏览器通过ocx访问海康设备浏览视频,如果需要的功能不全,再使用JNI ...

  8. 帝国 php ajax分页,帝国CMS-内容页评论AJAX分页显示插件下载

    本插件适用于帝国CMS6.0以上版本,压缩包提供"简体GBK"."简体UTF-8"两种版本. ******************** 安装插件 ******* ...

  9. scrapy项目--苏宁图书栏目内容爬虫

    scrapy项目–苏宁图书栏目内容爬虫 简介 来自一个自学爬虫的Python小白的经历:通过网络上的教学视频,模仿编程.由于视频资源比较老旧,技术更新较快,所以有些方面难以做到用视频教学代码成功运行. ...

最新文章

  1. 【Android 面试基础知识点整理】
  2. div地址跳转 vue_vue---导航栏点击跳转到对应位置
  3. 方法重载-Overload
  4. Python 技术篇-含中文编码的代码运行方法,(unicode error) ‘utf-8‘ codec can‘t decode问题原因及解决方法
  5. 视音频数据处理入门:UDP-RTP协议解析
  6. RDB和AOF速度测试
  7. java学习笔记之数组
  8. 如何选择适合你的企业数据管理类产品
  9. jeecg t:datagrid标签 每页显示条数 扩展
  10. request.META里包含了哪些数据?
  11. 95-136-041-源码-Operator-AbstractStreamOperator
  12. 神码与SUSE共促Unix向x86+Linux迁移
  13. AI专利申请5年激增1.8倍
  14. java输入输出流详解_Java输入输出流详解
  15. linux中cron表达式指南
  16. opnet matlab联合仿真,OPNET与Matlab联合仿真参数设置
  17. DB9公头母头的定义
  18. 基于javaEE的超市库存管理系统
  19. 给excel设置格式
  20. Python中的变量

热门文章

  1. 数据处理 过采样与欠采样 SMOTE与随机采样 达到样本均衡化
  2. 阿里云【达摩院特别版·趣味视觉AI训练营】笔记2
  3. vb.net 简单登录界面(三层架构思想)
  4. 交互组件滚动条,搜索框,上传组件,翻页的微创新
  5. 全国计算机等级三级网络技术试卷详解(三)
  6. WPS的Excel做一个下拉选择功能
  7. 一起读Apache ServiceComb
  8. “豪”秀上演——莱佛士学生作品精彩亮相施华蔻发布会
  9. beautifulsoup html内容_用python3教你任意Html主内容提取
  10. 数学符号对应的英文读音