JSP翻页的方法有很多,我在做学生管理系统的时候,就一直在想用什么方法来实现翻页。首先看一个最简单的方法:
<%@ page language="java" import="java.util.*,com.liweihua.persistence.*" pageEncoding="gb2312"%>
<%
//变量声明
java.sql.Connection sqlCon; //数据库连接对象
java.sql.Statement sqlStmt; //SQL语句对象
java.sql.ResultSet sqlRst; //结果集对象
java.lang.String strCon; //数据库连接字符串
java.lang.String strSQL; //SQL语句
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
java.lang.String strPage;
int i;
//设置一页显示的记录数
intPageSize = 10;
//取得待显示页码
strPage = request.getParameter("page");
if (strPage == null) { //表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
} else { //将字符串转换成整型
intPage = java.lang.Integer.parseInt(strPage);
if (intPage < 1)
intPage = 1;
}
//装载JDBC驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//设置数据库连接字符串 ,你的ODBC名字
strCon = "jdbc:odbc:information";
//连接数据库
sqlCon = java.sql.DriverManager.getConnection(strCon, "", "");
//创建一个可以滚动的只读的SQL语句对象
sqlStmt = sqlCon.createStatement(
java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
java.sql.ResultSet.CONCUR_READ_ONLY);
//准备SQL语句
strSQL = "select admin_loginname,admin_realname, admin_rank,admin_class_id,admin_duty,admin_phone,admin_logintime from admin order by admin_rank";
//执行SQL语句并获取结果集
sqlRst = sqlStmt.executeQuery(strSQL);
//获取记录总数
sqlRst.last();
intRowCount = sqlRst.getRow();
//记算总页数
intPageCount = (intRowCount + intPageSize - 1) / intPageSize;
//调整待显示的页码
if (intPage > intPageCount)
intPage = intPageCount;
%>
<%
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>管理员信息浏览</title>
<link href="<%=path%>/main/css/swb.css" rel="stylesheet" type="text/css">
<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">
<style type="text/css">
<!--
.STYLE1 {color: #660099}
-->
</style>
</head>
<body>
<center>
<h2><span class="STYLE1">管理员信息浏览</span> <br>
<br>
</h2>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th>ID</th>
<th>姓名</th>
<th>权限</th>
<th>班级</th>
<th>职务</th>
<th>电话</th>
<th>最后登陆时间</th>
</tr>
<%
if (intPageCount > 0) {
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage - 1) * intPageSize + 1);
//显示数据
i = 0;
String class_id="";
String class_statement="";
ClassDB classdb = new ClassDB();
while (i < intPageSize && !sqlRst.isAfterLast()) {
%>
<tr>
<td><%=sqlRst.getString(1)%></td>
<td><%=sqlRst.getString(2)%></td>
<td><%=sqlRst.getString(3)%></td>
<%
//通过班级的ID拿到班级的专业和班号
class_id = sqlRst.getString(4);
//给一个班级的ID返回 一个字符串:信息系 XX专业 XX班
class_statement = classdb.getClassMajorClassbyID(class_id);
%>
<td><%=class_statement %></td>
<td><%=sqlRst.getString(5)%></td>
<td><%=sqlRst.getString(6)%></td>
<td><%=sqlRst.getString(7)%></td>
</tr>
<%
sqlRst.next();
i++;
}
}
%>
</table>
<BR>
<BR>
第<%=intPage%>页 共<%=intPageCount%>页
<%
if (intPage < intPageCount) {
%><a
href="admin\admin_browse.jsp?page=<%=intPage + 1%>">下一页</a>
<%
}
%>
<%
if (intPage > 1) {
%><a href="admin\admin_browse.jsp?page=<%=intPage - 1%>">上一页</a>
<%
}
%>
</center>
</body>
</html>
<%
//关闭结果集
sqlRst.close();
//关闭SQL语句对象
sqlStmt.close();
//关闭数据库
sqlCon.close();
%>
这个方法实现了翻页功能,但是发现核心代码都写在了页面上,这样就是造成系统的安全性不高。我也考虑过这个问题,但是由于为系做系统,再加上快考TOEFL了,为了快速开发,我就运用了这个方法。
昨天晚上和我的JAVA启蒙老师谈论了关于JAVA翻页技术,我感觉深受启发。翻页应该通过JAVABEAN来实现,传入JAVABEAN一个页数,返回 一个list,而这个list中数据量是通过SQL中的limit这个函数来实现的。这样问题就简单了。我们也学过ASP的翻页,方法和最上面的原始方法 一样,我越来越发现JSP的重要性了。