版权声明:转载请注明出处!! https://blog.csdn.net/IPI715718/article/details/85850838
此次demo是用的servlet+jsp+jdbc写的没有使用框架。mvc部分没有展示。
自己封装的分页工具类:
package com.pagetest.utils;
import java.util.ArrayList;
import java.util.List;
/**
* @author liuzhe
*
*/
public class PageHelper {
//目前页码
private int pageNo;
//总页数
private int pageNum;
//一页的容量
private int pageSize;
//记录总数
private int total;
//是否有下一页(默认存在)
private boolean havaNext = true;
//是否有上一页(默认存在)
private boolean haveLast = true;
//记录载体
private List<?> list;
//页码栏显示的页码数
private int pagesInPage;
//页码载体
private List<Integer> pages;
public int getPagesInPage() {
return pagesInPage;
}
public void setPagesInPage(int pagesInPage) {
this.pagesInPage = pagesInPage;
pages = new ArrayList<Integer>();
int page = pageNo;
//当剩余的页码数小于页码栏显示的页码数时显示最后的等于页码栏要显示的页码数
if(pageNum-pageNo<pagesInPage) {
page = pageNum-pagesInPage+1;
for(int i=1;i<=pagesInPage;i++) {
pages.add(page);
page = page+1;
}
}else {
//pageNo位于页码条首位
for(int i=1;i<=pagesInPage;i++) {
pages.add(page);
page = page+1;
}
}
}
public List<Integer> getPages() {
return pages;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageNum() {
return pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
//计算出总页数
if(total%pageSize==0) {
this.pageNum = (int)this.total/pageSize;
}else {
this.pageNum = (int)this.total/pageSize+1;
}
//判断是否有下一页
if(this.pageNo==1) {
this.haveLast = false;
}
//判断是否有上一页
if(this.pageNo==this.pageNum) {
this.havaNext = false;
}
}
public void setList(List<?> list) {
this.list = list;
}
public List<?> getList() {
return list;
}
public boolean isHavaNext() {
return havaNext;
}
public boolean isHaveLast() {
return haveLast;
}
}
使用jdbc测试:
数据库连接工具类:
package com.pagetest.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @author liuzhe
*
*/
public class DataSource {
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获得数据库连接
*/
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306"
+ "/taotao?characterEcoding=utf-8&useSSL=false&"
+ "serverTimezone=UTC&rewriteBatchedStatements=true",
"root", "root");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 关闭数据库连接
*/
public static void closeConnection(Connection connection) {
if(connection!=null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
service实现类:
package com.pagetest.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.pagetest.dao.ItemDao;
import com.pagetest.pojo.Item;
import com.pagetest.utils.DataSource;
public class ItemDaoImpl implements ItemDao {
private Connection connection;
private PreparedStatement statement;
private ResultSet resultSet;
private String sql;
private List<Item> list;
/**
* 查询所有商品
*/
public List<Item> selectItem(int pageSize, int pageNo) {
connection = DataSource.getConnection();
sql = "SELECT * from tb_item LIMIT ?,?";
try {
statement = connection.prepareStatement(sql);
statement.setInt(1, (pageNo-1)*pageSize);
statement.setInt(2, pageSize);
resultSet = statement.executeQuery();
list = new ArrayList<Item>();
while(resultSet.next()) {
Item item = new Item();
item.setId(resultSet.getLong(1));
item.setTitle(resultSet.getString(2));
item.setSellPoint(resultSet.getString(3));
item.setPrice(resultSet.getLong(4));
item.setNum(resultSet.getInt(5));
item.setBarcode(resultSet.getString(6));
item.setImage(resultSet.getString(7));
list.add(item);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
/**
* 查询商品总记录条数
*/
public int selectTotal() {
int total = 0;
connection = DataSource.getConnection();
String sql = "SELECT COUNT(1) FROM tb_item";
try {
statement = connection.prepareStatement(sql);
resultSet = statement.executeQuery();
while(resultSet.next()) {
total = resultSet.getInt(1);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return total;
}
}
controller层:
package com.pagetest.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.pagetest.pojo.Item;
import com.pagetest.service.ItemService;
import com.pagetest.service.impl.ItemServiceImpl;
import com.pagetest.utils.PageHelper;
/**
* @author liuzhe
*
*/
public class ItemController extends HttpServlet {
private static final long serialVersionUID = 1L;
private ItemService itemService = new ItemServiceImpl();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int pageNo;
String pageNo_str = request.getParameter("pageNo");
if(pageNo_str==null) {
//默认第一页
pageNo = 1;
}else{
pageNo = Integer.parseInt(pageNo_str);
}
//每页5条记录
int pageSize = 5;
int total = itemService.getTotal();
List<Item> list = itemService.selectItems(pageSize, pageNo);
PageHelper helper = new PageHelper();
helper.setPageNo(pageNo);
helper.setPageSize(pageSize);
helper.setTotal(total);
helper.setList(list);
//页码栏设置显示10个页码
helper.setPagesInPage(10);
request.setAttribute("pageHelper", helper);
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
jsp: 没有使用ajax异步通信,使用的链接方式。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>网上商城</title>
</head>
<body>
<h1 align="center">欢迎来到购物商城!</h1>
<table border="1" >
<tr>
<td>id</td>
<td>商品名</td>
<td>卖点</td>
<td>价格</td>
<td>库存</td>
<td>条形码</td>
<td>图片</td>
<td>购买</td>
</tr>
<c:forEach items="${requestScope.pageHelper.list }" var="item">
<tr>
<td>${item.id }</td>
<td>${item.title }</td>
<td>${item.sellPoint }</td>
<td>${item.price }</td>
<td>${item.num }</td>
<td>${item.barcode }</td>
<td>${item.image }</td>
<td><a href="#"><font color="red">点击购买</font></a></td>
</tr>
</c:forEach>
</table>
<h2 align="center">这是第<font color="pink">${requestScope.pageHelper.pageNo }</font>页</h2>
<h6>
<a href="/PageTest/ItemController?pageNo=1">首页</a>
<c:if test="${requestScope.pageHelper.haveLast==true }">
<a href="/PageTest/ItemController?pageNo=${requestScope.pageHelper.pageNo-1 }">上一页</a>
</c:if>
<c:forEach items="${requestScope.pageHelper.pages }" var="page">
<a href="/PageTest/ItemController?pageNo=${page }"><${page }></a>
</c:forEach>
<c:if test="${requestScope.pageHelper.havaNext==true }">
<a href="/PageTest/ItemController?pageNo=${requestScope.pageHelper.pageNo+1 }">下一页</a>
</c:if>
<a href="/PageTest/ItemController?pageNo=${requestScope.pageHelper.pageNum }">尾页</a>
</h6>
</body>
</html>
结果:
第一页,上一页链接消失。
第二页
尾页 ,下一页链接消失