Java Web 简单的分页显示实例代码

来源:互联网 发布:竹笛模拟软件安卓版 编辑:程序博客网 时间:2024/05/22 12:44

这篇文章主要介绍了Java Web 简单的分页显示实例代码的相关资料,本文通过,计算总的页数和查询指定页数据两个方法实现分页效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下

本文通过两个方法:(1)计算总的页数。 (2)查询指定页数据,实现简单的分页效果。

思路:首先得在 DAO 对象中提供分页查询的方法,在控制层调用该方法查到指定页的数据,在表示层通过 EL 表达式和 JSTL 将该页数据显示出来。

先给大家展示下效果图:

题外话:该分页显示是用 “表示层-控制层-DAO层-数据库”的设计思想实现的,有什么需要改进的地方大家提出来,共同学习进步。废话不多说了,开始进入主题,详细步骤如下所示:

1.DAO层-数据库

JDBCUtils 类用于打开和关闭数据库,核心代码如下:

importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
publicclass JDBCUtils {
privateConnection conn=null;
privatePreparedStatement pstmt=null;
/**
* connect 连接数据库
* @return
*/
publicConnection connect(){
String user="root";
String password="1234";
String driverClass = "com.mysql.jdbc.Driver";
String jdbcUrl = "jdbc:mysql://localhost:3306/book";
try{
Class.forName(driverClass);
conn = DriverManager.getConnection(jdbcUrl, user, password);
}catch(Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
returnconn;
}
/**
* close 关闭数据库
* @param conn
* @param pstmt
* @param resu
*/
publicvoid close(Connection conn,PreparedStatement pstmt,ResultSet result){
if(conn != null){
try{
conn.close();
}catch(SQLException e) {
// TODO Auto-generated catch block
}
}
if(pstmt != null){
try{
pstmt.close();
}catch(SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(result != null){
try{
result.close();
}catch(SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
UserDao 类中的方法 getPage() 和方法 listUser() 分别用来计算总页数和查询指定页的数据,核心代码如下:

importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
importjava.util.List;
importcom.db.JDBCUtils;
publicclass UserDao {
/**
* 计算总的页数
* @return
*/
publicint getPage(){
intrecordCount=0,t1=0,t2=0;
PreparedStatement pstmt=null;
ResultSet result=null;
JDBCUtils jdbc=newJDBCUtils();
Connection conn=jdbc.connect();
String sql="select count(*) from books";
try{
pstmt=conn.prepareStatement(sql);
result=pstmt.executeQuery();
result.next();
recordCount=result.getInt(1);
t1=recordCount%5;
t2=recordCount/5;
}catch(Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
jdbc.close(conn, pstmt, result);
}
if(t1 != 0){
t2=t2+1;
}
returnt2;
}
/**
* 查询指定页的数据
* @param pageNo
* @return
*/
publicList<User> listUser(intpageNo){
PreparedStatement pstmt=null;
ResultSet result=null;
List<User> list=newArrayList<User>();
intpageSize=5;
intpage=(pageNo-1)*5;
JDBCUtils jdbc=newJDBCUtils();
Connection conn=jdbc.connect();
String sql="select * from books order by id limit ?,?";
try{
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, page);
pstmt.setInt(2, pageSize);
result=pstmt.executeQuery();
while(result.next()){
User user=newUser();
user.setId(result.getInt(1));
user.setName(result.getString(2));
user.setNumber(result.getString(3));
list.add(user);
}
}catch(Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
jdbc.close(conn, pstmt, result);
}
returnlist;
}
}
User 类用于存储查询到的数据,核心代码如下:

publicclass User {
privateint id;
privateString name;
privateString number;
publicint getId() {
returnid;
}
publicvoid setId(intid) {
this.id = id;
}
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
publicString getNumber() {
returnnumber;
}
publicvoid setNumber(String number) {
this.number = number;
}
}

2.控制层

ListUser 类内部调用 UserDao 对象查询数据并指派页面显示数据,核心代码如下:

importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.ArrayList;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.dao.User;
importcom.dao.UserDao;
publicclass ListUser extendsHttpServlet {
publicListUser() {
super();
}
publicvoid destroy() {
super.destroy();// Just puts "destroy" string in log
// Put your code here
}
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doPost(request, response);
}
publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
response.setCharacterEncoding("utf-8");
intpageNo = 1;
UserDao userdao=newUserDao();
List<User> lists=newArrayList<User>();
String pageno=request.getParameter("pageNos");
if(pageno != null){
pageNo=Integer.parseInt(pageno);
}
lists=userdao.listUser(pageNo);
intrecordCount=userdao.getPage();
request.setAttribute("recordCount", userdao.getPage());
request.setAttribute("listss", lists);
request.setAttribute("pageNos", pageNo);
request.getRequestDispatcher("userlist.jsp").forward(request, response);
}
publicvoid init() throwsServletException {
// Put your code here
}
}

3.表示层
       输出页面 userlist.jsp ,使用 EL 和 JSTL 输出查询结果,核心代码如下:

<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>
<%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions"prefix="fn"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'userlist.jsp'starting page</title>
<meta http-equiv="pragma"content="no-cache">
<meta http-equiv="cache-control"content="no-cache">
<meta http-equiv="expires"content="0">
<meta http-equiv="keywords"content="keyword1,keyword2,keyword3">
<meta http-equiv="description"content="This is my page">
<!--
<link rel="stylesheet"type="text/css"href="styles.css">
-->
<style type="text/css">
th,td{width: 150px;border: 2px solid gray;text-align: center;}
body{text-align: center;}
a{text-decoration: none;}
table {border-collapse: collapse;}
</style>
</head>
<body>
<h2 align="center">图书信息</h2>
<table align="center">
<tr><td>书号</td><td>书名</td><td>库存量</td></tr>
</table>
<table align="center">
<c:forEach items="${listss}"var="person">
<tr>
<tdclass="hidden-480">${person.id}</td>
<tdclass="hidden-480">${person.name }</td>
<tdclass="hidden-480">${person.number }</td>
</tr>
</c:forEach>
</table>
<br>
<c:iftest="${pageNos>1 }">
<a href="ListUser?pageNos=1">首页</a>
<a href="ListUser?pageNos=${pageNos-1 }">上一页</a>
</c:if>
<c:iftest="${pageNos <recordCount }">
<a href="ListUser?pageNos=${pageNos+1 }">下一页</a>
<a href="ListUser?pageNos=${recordCount }">末页</a>
</c:if>
<form action="ListUser">
<h4 align="center">共${recordCount}页  
<input type="text"value="${pageNos}"name="pageNos"size="1">页
<input type="submit"value="到达">
</h4>
</form>
</body>
</html>
至此,功能已实现完毕,分页技术的关键在于搞清楚那几个关键变量的由来 以及具体的实际意义,只有这样以后再编写相同功能的代码才能得心应手,信手拈来,一般无外乎"数据的总条数"," 每页显示的条数","当前页码",等关键变量,至于第一个可以轻松从数据库查询得知,而每显示的条数具体项目中会有规定无需我们格外操心,所以我们把重心点放到最后那个点就行,支持到此结束,希望可以帮到需要人,谢谢大家支持!!!



原创粉丝点击