java 實現的分頁導航
阿新 • • 發佈:2019-01-11
最近在複習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.com/jsp/jstl/core"%>
<%@ include file="/paged.jsp" %>
<!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>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.com/jsp/jstl/core"%>
<!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>
<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)