项目学习 —— 图书后台内容分页显示
一. 编写页面对应的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>
项目学习 —— 图书后台内容分页显示相关推荐
- 文章,记录按内容分页显示,根据文章内容按字数进行分页(转)
在很多时候我们对一些文章很长时,往往浏览时用鼠标滑来滑去非常麻烦.要是我们对这篇文章划分为几个 页面,用不同的面页去浏览不但看起来很爽,而且效率方面也是大的提高了. 下面是一段代码,给大家做个参考: ...
- 项目学习 —— 图书商城后台管理
查询.修改.删除数据库中数据. 一. 创建数据库和表 在数据库studyproject下创建一个book表 CREATE TABLE `studyproject`.`book` (`id` INT N ...
- mysql 删除数据 分页_PHP实现对mysql数据库内容分页显示
在写列表页读数据的时候往往要写上一个分页代码,小编研究了很久,也搜索了很多东西,最后总结出了以下分页代码,有需要的朋友可以研究研究 /**********分页开始**********/ $pageSi ...
- php5.6版本帝国cms后台内容不显示,帝国cms后台编辑器显示不完整无法操作的处理方法...
国内网产建设门槛变低,功劳应该是些这些网站建站系统,如最热的织梦cms(dedecms),有优企业服务的phpcms,还有小众但是安全的帝国cms, 当然还有论坛建站系统,phpwind和Discuz ...
- 文章内容分页功能实现
文章内容分页,一篇文章内容过长,我们考虑内容分页显示.对于这个要求,得先从数据库设计角度来说,应该是一对多的关系.因此你需要设计两张表来存储文章的信息,第一张是基本的,如标题,摘要,作者等字段.另一个 ...
- Eclipse搭建SSH环境实现Struts2分页显示mysql数据库表中内容
2019独角兽企业重金招聘Python工程师标准>>> 摘要 学习(Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程),尝试搭建ssh框架 ...
- java 前台播放视频_「纯js项目」海康视频项目,java后台+前台web显示的,望提供思路!...
纯js项目: 海康视频项目,java后台+前台web显示的,望提供思路! 如果只是实现BS架构,可以向海康要web开发包,直接使用浏览器通过ocx访问海康设备浏览视频,如果需要的功能不全,再使用JNI ...
- 帝国 php ajax分页,帝国CMS-内容页评论AJAX分页显示插件下载
本插件适用于帝国CMS6.0以上版本,压缩包提供"简体GBK"."简体UTF-8"两种版本. ******************** 安装插件 ******* ...
- scrapy项目--苏宁图书栏目内容爬虫
scrapy项目–苏宁图书栏目内容爬虫 简介 来自一个自学爬虫的Python小白的经历:通过网络上的教学视频,模仿编程.由于视频资源比较老旧,技术更新较快,所以有些方面难以做到用视频教学代码成功运行. ...
最新文章
- 【Android 面试基础知识点整理】
- div地址跳转 vue_vue---导航栏点击跳转到对应位置
- 方法重载-Overload
- Python 技术篇-含中文编码的代码运行方法,(unicode error) ‘utf-8‘ codec can‘t decode问题原因及解决方法
- 视音频数据处理入门:UDP-RTP协议解析
- RDB和AOF速度测试
- java学习笔记之数组
- 如何选择适合你的企业数据管理类产品
- jeecg t:datagrid标签 每页显示条数 扩展
- request.META里包含了哪些数据?
- 95-136-041-源码-Operator-AbstractStreamOperator
- 神码与SUSE共促Unix向x86+Linux迁移
- AI专利申请5年激增1.8倍
- java输入输出流详解_Java输入输出流详解
- linux中cron表达式指南
- opnet matlab联合仿真,OPNET与Matlab联合仿真参数设置
- DB9公头母头的定义
- 基于javaEE的超市库存管理系统
- 给excel设置格式
- Python中的变量
热门文章
- 数据处理 过采样与欠采样 SMOTE与随机采样 达到样本均衡化
- 阿里云【达摩院特别版·趣味视觉AI训练营】笔记2
- vb.net 简单登录界面(三层架构思想)
- 交互组件滚动条,搜索框,上传组件,翻页的微创新
- 全国计算机等级三级网络技术试卷详解(三)
- WPS的Excel做一个下拉选择功能
- 一起读Apache ServiceComb
- “豪”秀上演——莱佛士学生作品精彩亮相施华蔻发布会
- beautifulsoup html内容_用python3教你任意Html主内容提取
- 数学符号对应的英文读音