JSP实现分页效果!(构造方法强大应用啊~~)

本文介绍了一种基于Java和MySQL的简单分页查询实现方法,包括Page<T>工具类的设计及其在Web应用中的具体使用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


先说明下,这里使用的数据库是MySQL


首先新建一个Page<T>的工具类,放在util包里;有以下方法:


1.private int currPage;(当前页)


2.private int pageSize;(每页显示的条数)


3.private int totalSize; (总条数)


4.private List<T> list;(放入数据,我这里放进的是User对象)等;


下面是java类:Page 代码:


package com.meichaoit.util;

import java.util.List;

public class Page<T> {
	
	//当前页
	private int currPage;
	private List<T> list;
	//每页显示条数
	private int pageSize = 3;
	//总条数
	private int totalSize;
	
	/**
	 * 传进来数据库里的总条数以及每页显示的条数
	 * @param count
	 * @param pageSize
	 */
	public  Page(int count , int pageSize) {
		setTotalSize(count);
		setPageSize(pageSize);
	}
	
	/**
	 * 获取起始行数下标
	 * @return
	 */
	public int getStatIndex() {
		return (getCurrPage()-1)*getPageSize();
	}
	/**
	 * 获取总页数
	 * @return
	 */
	public int getTotalPage(){
		int page = getTotalSize()/getPageSize();
		if(getTotalSize()%getPageSize() != 0){
			page++;
		}
		return page;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getTotalSize() {
		return totalSize;
	}
	public void setTotalSize(int totalSize) {
		this.totalSize = totalSize;
	}
	public int getCurrPage() {
		return currPage;
	}
	public void setCurrPage(int currPage) {
		this.currPage = currPage;
	}
	public List<T> getList() {
		return list;
	}
	public void setList(List<T> list) {
		this.list = list;
	}
	
}

下面是HTML,迭代出User对象

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title>ecweb</title>
   
  </head>
  
  <body>
  	<h3> 欢迎您!${sessionScope.currUser.name}</h3>
  	<h3><a href="user.jspx?_m=toEnroll">添加新用户</a></h3><h3><a href="user.jspx?_m=exit">退出</a></h3>
  	<table  bgcolor="#000" cellspacing="1" border="0">
  		<tr bgcolor="#fff">
  			<td >用户名</td>
  			<td >用户密码</td>
  			<td >操作</td>
  		</tr>
  		<c:forEach items="${page.list }" var="u">
  		<tr bgcolor="#fff">
  			<td>${u.name }</td>
  			<td>${u.password}</td>
  			<td>
  				<a href="user.jspx?_m=toUpdate&id=${u.id }">修改</a>
  				<a href="user.jspx?_m=delete&id=${u.id }">删除</a>
  			</td>
  		</tr>
  		</c:forEach>
  		<a href="user.jspx?p=1">首页</a>
		<a href="user.jspx?p=${page.currPage-1 }">上一页</a>
		<a href="user.jspx?p=${page.currPage+1 }">下一页</a>
		<a href="user.jspx?p=${page.totalPage}">尾页</a>  	
  	</table>
  </body>
</html>

处理逻辑我用的是UserServlet 这里只copy出Page分页代码:


private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		//获取页面的传值,即用户要跳到那一页
		String pnum = request.getParameter("p");
		//初始值为1
		int pageNum = 1;
		if(pnum != null){
			pageNum = Integer.parseInt(pnum);
		}
		UserDao dao = new UserDao();
		Page<User> page = (Page<User>) dao.findAll(pageNum);
		if(page != null){
			request.setAttribute("page", page);
			request.getRequestDispatcher("main.jsp").forward(request, response);
		}
	}

    在DAO中,要与数据库交互,要获取两个值,一个是数据库的数据的总数(count),和每页显示的所有数据findAll,例如:第一页显示3条数据;下面是部分代码:

public int count(){
		String sql = "select count(*) from t_user";
		return db.queryForCount(sql);
	}
	public Page<User> findAll(int pageNum){
		Page<User> page = new Page<User>(count(), 3);
		page.setCurrPage(pageNum);
		
		String sql = "SELECT id,NAME,PASSWORD FROM t_user limit ?,?";
		List<User> list = db.queryForList(sql, new UserRowMapper(),page.getStatIndex(),page.getPageSize());
		page.setList(list);
		return page;
	}

ps:我没有加判断是否有上一页和下一页的效果,大家可以自己加一下,以上方法大家可以参考,如果有更好的方法,就一起分享吧





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值