实现原理很简单,就是建立一个Page类,里面放当前访问的页数和每一页显示的记录行数。然后通过分页计算就可以得出下列数据。
总页数 = 总记录数/每页大小,如果0!=总记录数%每页大小,那么总页数再+1。
当前页数。
表记录的起始位置=(当前页数-1)*每页大小。
总记录数(select count(*) from [表名] [where [条件]]。从数据库中查询得到)
每页大小,可以固定,也可以从页面传过来有了这几个参数之后,就用sql语句查出对应的记录就可以了。
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。
Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布。
Java的主要工作是通过编程语言来制作互联网页面、制作动态效果以及网站等技术。
/*** 分页代码
*
* @author Star
* @version 1.0 2008/07/08
*/
public class CutPage implements Serializable{
private static Log log = LogFactory.getLog(CutPage.class)
private int curPageNo = 0 // 当前页数,从0开始
private int size = 0 // 所有数据条数
private String url // 页面跳转的路径
private List showList // 当前页面需要显示的数据列表
private int pageSize = 20// 每页显示的数据条数
private int groupSize = 1// 多少页为一组
private String pageNavigation// 导航条
/**
* 每次通过sql语句从数据库里面分组取出需要显示的数据
*
* @param request
* javax.servlet.http.HttpServletRequest对象
* @param sql
* String 查询数据库的sql语句
* @param pageSize
* int 每页显示的条数
* @param groupSize
* int 分成多少组
* @param url
* String 页面跳转的路径,若没有特殊的参数传递,可以传入null或"",
* 如是在aciton里面调用,并且action是继承自DispatherAction的话最好传入完整的路径
*/
public void init(HttpServletRequest request, String sql, int pageSize,
int groupSize, int pageNo, String url) {
// 上一页、下一页跳转路径
if (url != null) {
this.url = url
} else {
this.url = request.getRequestURL() + ""
}
if (pageSize > 0)
this.pageSize = pageSize// 每页多少条记录
if (groupSize > 0)
this.groupSize = groupSize
// 当前第几页
if (pageNo < 0) {
this.curPageNo = 0
} else {
this.curPageNo = pageNo
}
int curGroup = this.curPageNo / this.groupSize + 1
// 是否是新的一组数据,如果是则到数据库取数据
this.size = parseInt(request.getSession().getAttribute("page_all_size")
+ "", 0)
if (this.curPageNo % this.groupSize == 0
|| (request.getSession().getAttribute("cur_group") != null && parseInt(
"" + request.getSession().getAttribute("cur_group"), 1) != curGroup)
|| this.size == 0 || request.getParameter("reload") != null) {
request.getSession().setAttribute("cur_group", curGroup)
if (pageNo > 0
&& request.getSession().getAttribute("page_sql") != null) {
sql = request.getSession().getAttribute("page_sql") + ""
} else {
request.getSession().setAttribute("page_sql", sql)
}
this.size = getTotalCount(sql)
List list = getPageData(sql, (this.curPageNo / this.groupSize)
* this.pageSize * this.groupSize, this.pageSize
* this.groupSize)
request.getSession().setAttribute("page_all_size", this.size)
request.getSession().setAttribute("page_cur_list", list)
this.setShowList(list)// 设置页面上的显示数据
} else {
this.setShowList((List) request.getSession().getAttribute(
"page_cur_list"))// 设置页面上的显示数据
}
}
/**
* 每次通过sql语句从数据库里面分组取出需要显示的数据
*
* @param request
* javax.servlet.http.HttpServletRequest对象
* @param sql
* String 查询数据库的sql语句
* @param pageSize
* int 每页显示的条数
* @param groupSize
* int 分成多少组
* @param url
* String 页面跳转的路径,若没有特殊的参数传递,可以传入null或"",
* 如是在aciton里面调用,并且action是继承自DispatherAction的话最好传入完整的路径
*/
public void init(HttpServletRequest request, String sql, int pageSize,
int groupSize, String url) {
// 当前第几页
String curPage = request.getParameter("pageNo")
init(request, sql, pageSize, groupSize, parseInt(curPage, -1), url)
}
/**
* 每次通过sql语句从数据库里面分组取出需要显示的数据
*
* @param request
* javax.servlet.http.HttpServletRequest对象
* @param sql
* String 查询数据库的sql语句
* @param pageSize
* int 每页显示的条数
* @param groupSize
* int 分成多少组
* @param url
* String 页面跳转的路径,若没有特殊的参数传递,可以传入null或"",
* 如是在aciton里面调用,并且action是继承自DispatherAction的话最好传入完整的路径
*/
public void init(HttpServletRequest request, String sql, int pageSize,
int groupSize, int pageNo) {
init(request, sql, pageSize, groupSize, pageNo, "")
}
太多了,贴不下,见附件
一个BBS数据库,你将相关数据库查询语句改改,应该就行了(文件名ShowArticleFlat.jsp)<%@ page language="java" contentType="text/htmlcharset=gbk"
pageEncoding="gbk"%>
<%@page import="java.sql.*" %>
<%
int pageSize = 3//每一页显示信息的条数
String strPageNo = request.getParameter("pageNo")//接收传入的页码
int pageNo //当前的页码
if(strPageNo == null || strPageNo.equals("")) {
pageNo = 1
} else {
try {
pageNo = Integer.parseInt(strPageNo.trim())
} catch(NumberFormatException e) {
pageNo = 1
}
if(pageNo <= 0) {
pageNo = 1
}
}
Class.forName("com.mysql.jdbc.Driver")//获取数据库驱动
String url = "jdbc:mysql://localhost/bbs?user=root&password=root"
Connection conn = DriverManager.getConnection(url)//获取数据库连接
Statement stmtCount = conn.createStatement()
ResultSet rsCount = stmtCount.executeQuery("select count(*) from article where pid=0")
rsCount.next()
int totalRecords = rsCount.getInt(1)//获得数据库中的所有记录数
int totalPages = totalRecords % pageSize == 0 ? totalRecords / pageSize : totalRecords / pageSize + 1//总共分多少页
if(pageNo >totalPages) { //如果接收的页码大于总页码,那么就将页码设置成最大页码
pageNo = totalPages
}
int startPos = (pageNo - 1) * pageSize
Statement stmt = conn.createStatement()
ResultSet rs = stmt.executeQuery("select * from article where pid=0 order by pdate desc limit " + startPos + "," + pageSize)//获取数据库查询结果集
%>
<!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/htmlcharset=gbk">
<title>Insert title here</title>
</head>
<body>
<a href="Post.jsp">发表新帖</a>
<table border="1">
<%
while(rs.next()) {
%>
<tr>
<td><%=rs.getString("title") %></td>
</tr>
<%
}
rs.close()
stmt.close()
conn.close()
%>
</table>
共<%=totalPages %>页 第<%=pageNo %>页
<a href="ShowArticleFlat.jsp?pageNo=1">首页</a>
<a href="ShowArticleFlat.jsp?pageNo=<%=pageNo-1%>">上一页</a>
<a href="ShowArticleFlat.jsp?pageNo=<%=pageNo+1%>">下一页</a>
<a href="ShowArticleFlat.jsp?pageNo=<%=totalPages%>">尾页</a>
<form name="form1" action="ShowArticleFlat.jsp">
<select name="pageNo" onchange="document.form1.submit()">
<%
for(int i=1i<=totalPagesi++) {
%>
<option value=<%=i%><%=(pageNo == i) ? "selected" : ""%>>第<%=i%>页</option>
<%
}
%>
</select>
</form>
<form name="form2" action="ShowArticleFlat.jsp">
输入页码<input type="text" name="pageNo" value=<%=pageNo%>>
<input type="submit" value="GO">
</form>
</body>
</html>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)