最近在复习javaweb, 顺便手写了一个分页实现.之前项目的分页都是用的别人的PageHelper,在这里贴下完整的过程 .
首先是效果图:下面不多bb,直接开整:
项目目录: 本人编辑器是eclipse
首先是Bean:
User类:
package com.paged.pojo;
import java.util.Date;
public class TbUser {
private Long id;
private String username;
private String password;
private String phone;
private String email;
private Date created;
private Date updated;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone == null ? null : phone.trim();
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email == null ? null : email.trim();
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
}
PagedBean(这里是重点):
package com.paged.pojo;
import java.util.List;
/**
* 创建pagedBean类存放数据
* @author younus
* 2018年1月16日
* @param <T>
* com.paged.pojo
*/
public class PagedBean <T>{
//需要有的属性
//总页数,数据总条数,当前页码 ,每页数据数量,显示的起始页,显示的尾页,数据库起始索引,封装数据的列表
private int totalPage;
private int totalRecord;
private int pageNumber;
private int pageSize;
private int start;
private int startIndex;
private int end;
private List<T> list;
public PagedBean(int pageNumber,int pageSize,int totalRecord) {
this.pageNumber=pageNumber;
this.pageSize=pageNumber;
this.totalRecord=totalRecord;
//totalPage总页数
if(totalRecord%pageSize==0) {
this.totalPage=totalRecord/pageSize;
}else {
this.totalPage=totalRecord/pageSize +1;
}
//初始索引,这里注意limit 是从0开始索引的
this.startIndex=(pageNumber-1)*pageSize;
this.start=1;
this.end=5;
//显示页数的算法
if(totalPage<5) {
this.end=this.totalPage;
this.start=1;
}else {
this.start=pageNumber-2;
this.end=pageNumber+2;
if(this.start<=0) {
this.start=1;
}else if(this.end>this.totalPage) {
this.end=this.totalPage;
this.start=this.end-5;
}
}
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
工具类(mysql):
package com.paged.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
private static String url = "jdbc:mysql://localhost:3306/youyou?useUnicode=true&characterEncoding=utf8";
private static String user = "root";
private static String password = "*******";
private DBUtil(){}
//工具类,加载驱动和获取连接对象
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
//获取连接的方法
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
//关闭数据库连接的方法
public static void close(ResultSet rs, Statement st, Connection conn) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
DAO类:
package com.paged.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.paged.pojo.TbUser;
import com.paged.utils.DBUtil;
public class UserDao {
public static List<TbUser> findAllUser(){
List <TbUser> list =new ArrayList<TbUser>();
Connection c=null;
ResultSet rs=null;
Statement sm=null;
try {
c=DBUtil.getConnection();
sm=c.createStatement();
String sql="select * from tb_user";
rs=sm.executeQuery(sql);
//键的集合
while(rs.next()) {
TbUser user =new TbUser();
user.setId((long)rs.getInt(1));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setPhone(rs.getString("phone"));
user.setEmail(rs.getString("email"));
user.setCreated(rs.getDate(6));
user.setUpdated(rs.getDate(7));
list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(rs, sm, c);
}
return list;
}
public static List<TbUser> findPage(int startIndex,int pageSize){
List<TbUser> list =new ArrayList<>();
Connection c=null;
ResultSet rs=null;
Statement sm=null;
try {
c=DBUtil.getConnection();
sm=c.createStatement();
String sql= "select * from tb_user limit "+startIndex+","+pageSize+"";
rs=sm.executeQuery(sql);
while (rs.next()) {
TbUser user =new TbUser();
user.setId((long)rs.getInt(1));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setPhone(rs.getString("phone"));
user.setEmail(rs.getString("email"));
user.setCreated(rs.getDate(6));
user.setUpdated(rs.getDate(7));
list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(rs, sm, c);
}
return list;
}
}
Service:
package com.paged.service;
import java.util.List;
import com.paged.dao.UserDao;
import com.paged.pojo.PagedBean;
import com.paged.pojo.TbUser;
public class UserService {
public PagedBean<TbUser> findAllUserByPage(int pageNum,int pageSize){
List<TbUser> list =UserDao.findAllUser();
int totalRecord=list.size();
PagedBean<TbUser> bean = new PagedBean<>(pageNum, pageSize, totalRecord);
int startIndex = bean.getStartIndex();
bean.setList(UserDao.findPage(startIndex, pageSize));
return bean;
}
}
Controller:
package com.paged.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.paged.pojo.PagedBean;
import com.paged.service.UserService;
/**
* Servlet implementation class UserController
*/
@WebServlet("/UserController")
public class UserController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//这一句会导致页面乱码
//response.getWriter().append("Served at: ").append(request.getContextPath());
int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
//定义页面大小
int pageSize=5;
UserService us=new UserService();
PagedBean pb=us.findAllUserByPage(pageNumber, pageSize);
//将bean放入request域中
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
request.setAttribute("pagedBean", pb);
request.getRequestDispatcher("test.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
接下来就是jsp文件:
index转到test.jsp(分页导航的jsp),test里边将显示表格数据的paged.jsp引入
test.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun/jsp/jstl/core"%>
<%@ include file="/paged.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 构建分页导航 --%>
总共记录条数: ${requestScope.pagedBean.totalRecord},共${requestScope.pagedBean.totalPage }页,当前为${requestScope.pagedBean.pageNumber}页
<br/>
<!-- 按钮代替 <a href="${pageContext.request.contextPath}/UserController?pageNumber=1">首页</a>-->
<input type="button" value="首页" onclick="location.href='UserController?pageNumber=1' ">
<%--如果当前页为第一页时,就没有上一页这个超链接显示 --%>
<c:if test="${requestScope.pagedBean.pageNumber ==1 }">
<c:forEach begin="${requestScope.pagedBean.start}" end="${requestScope.pagedBean.end}" step="1" var="i">
<c:if test="${requestScope.pagedBean.pageNumber == i}">
${i}
</c:if>
<c:if test="${requestScope.pagedBean.pageNumber != i}">
<!-- <a href="${pageContext.request.contextPath}/UserController?pageNumber=${i}">${i}</a> -->
<input type="button" value="${i} " onclick="location.href='UserController?pageNumber=${i}'">
</c:if>
</c:forEach>
<!-- <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.pageNumber+1}">下一页</a> -->
<input type="button" value="下一页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.pageNumber+1}' ">
</c:if>
<%--如果当前页不是第一页也不是最后一页,则有上一页和下一页这个超链接显示 --%>
<c:if test="${requestScope.pagedBean.pageNumber > 1 && requestScope.pagedBean.pageNumber < requestScope.pagedBean.totalPage}">
<!-- <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.pageNumber-1}">上一页</a> -->
<input type="button" value="上一页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.pageNumber-1}' ">
<c:forEach begin="${requestScope.pagedBean.start}" end="${requestScope.pagedBean.end}" step="1" var="i">
<c:if test="${requestScope.pagedBean.pageNumber == i}">
${i}
</c:if>
<c:if test="${requestScope.pagedBean.pageNumber != i}">
<!-- <a href="${pageContext.request.contextPath}/UserController?pageNumber=${i}">${i}</a> -->
<input type="button" value="${i} " onclick="location.href=' UserController?pageNumber=${i}' ">
</c:if>
</c:forEach>
<!-- <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.pageNumber+1}">下一页</a> -->
<input type="button" value="下一页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.pageNumber+1}' ">
</c:if>
<%-- 如果当前页是最后一页,则只有上一页这个超链接显示,下一页没有 --%>
<c:if test="${requestScope.pagedBean.pageNumber == requestScope.pagedBean.totalPage}">
<!-- <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.pageNumber-1}">上一页</a> -->
<input type="button" value="上一页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.pageNumber-1}' ">
<c:forEach begin="${requestScope.pagedBean.start}" end="${requestScope.pagedBean.end}" step="1" var="i">
<c:if test="${requestScope.pagedBean.pageNumber == i}">
${i}
</c:if>
<c:if test="${requestScope.pagedBean.pageNumber != i}">
<!-- <a href="${pageContext.request.contextPath}/UserController?pageNumber=${i}">${i}</a> -->
<input type="button" value="${i}" onclick="location.href=' UserController?pageNumber=${i}' ">
</c:if>
</c:forEach>
</c:if>
<%--尾页 --%>
<!-- <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.totalPage}">尾页</a>-->
<input type="button" value="尾页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.totalPage}' ">
</body>
</html>
paged.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>分页效果</title>
<style type="text/css">
.tr_1{
margin: 10px;
border: 5px;
border-color: red;
padding: 10px;
}
.tr{
background-color: black;
color: white;
}
</style>
</head>
<body>
<h1 style="color:red">这是分页效果</h1>
<table id="user">
<tr class="tr">
<td>Id</td>
<td>用户名</td>
<td>密码</td>
<td>邮箱</td>
<td>电话</td>
<td>创建时间</td>
<td>更新时间</td>
</tr>
<c:forEach items="${pagedBean.list}" var="TbUser" >
<tr class="tr_1">
<td>${TbUser.id}</td>
<td>${TbUser.username}</td>
<td>${TbUser.password }</td>
<td>${TbUser.email }</td>
<td>${TbUser.phone }</td>
<td>${TbUser.created}</td>
<td>${TbUser.updated}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
以上就是我自己实现的完整的分页过程,不对的地方欢迎指正!(我是编程菜b)
更多推荐
java 实现的分页导航
发布评论