友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
JSP入门教程(DOC格式)-第14部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
首先说数据库,里边只有一张表 bean,三个字段 id; title 和 add_date。
…bean
create table bean(
id bigint; …主键
title varchar (100); …标题
add_date datetime …时间
);
对应的 Bean。java 咱们就不用写了,只看一看后台去数据库读取数据库的
BeanServlet。java。
package anni;
import java。io。*;
import java。sql。*;
import java。util。*;
import javax。servlet。*;
import javax。servlet。http。*;
public class BeanServlet extends HttpServlet {
public void doGet(HttpServletRequest request; HttpServletResponse
response)
throws ServletException; IOException {
Connection conn = null;
Statement state = null;
ResultSet rs = null;
133 / 148
…………………………………………………………Page 134……………………………………………………………
// 获得当前页码
int pageNo = 1;
try {
pageNo = Integer。parseInt(request。getParameter(〃pageNo〃));
} catch (Exception ex) {
}
if (pageNo 《 1) {
pageNo = 1;
}
request。setAttribute(〃pageNo〃; pageNo);
List list = new ArrayList();
int count = 0;
// 根据页码从数据库中获得对应的数据
try {
conn = DbUtils。getConn();
state = conn。createStatement();
rs = state。executeQuery(〃select limit 〃 + (pageNo * 5 5)
+ 〃 5 * from bean〃);
while (rs。next()) {
Bean bean = new Bean();
bean。setId(rs。getLong(1));
bean。setTitle(rs。getString(2));
bean。setAddDate(rs。getTimestamp(3));
list。add(bean);
}
rs。close();
rs = state。executeQuery(〃select count(*) from bean〃);
if (rs。next()) {
count = rs。getInt(1);
}
} catch (Exception ex) {
ex。printStackTrace();
} finally {
DbUtils。close(rs; state; conn);
}
request。setAttribute(〃count〃; count);
request。setAttribute(〃list〃; list);
134 / 148
…………………………………………………………Page 135……………………………………………………………
request。getRequestDispatcher(〃/query。jsp〃)。forward(request;
response);
}
}
代码长了,分三段来看:
// 获得当前页码
int pageNo = 1;
try {
pageNo = Integer。parseInt(request。getParameter(〃pageNo〃));
} catch (Exception ex) {
}
if (pageNo 《 1) {
pageNo = 1;
}
request。setAttribute(〃pageNo〃; pageNo);
这里 pageNo 代表当前的页码,如果没有传递 pageNo 参数,默认显示第一
页,为此我们在解析 request 中参数时要捕获对应的异常,如果没有输入
或者参数不是一个数字时 pageNo 就还是等于 1。
rs = state。executeQuery(〃select limit 〃 + (pageNo * 5 5) + 〃 5
* from bean〃);
这里我们拼了一个 sql 语句,用来从 (pageNo * 5 5)开始查询五个记录,
这条 sql 语句是 hsqldb 数据库特有的分页语句。
(pageNo * 5 5)用来计算 pageNo 这页第一条记录的行号,如果是第一
页 pageNo = 1,pageNo * 5 5 = 0。这里的行号跟咱们平常使用的数
组索引一样,0 代表第一个条记录,这样我们第一页就会显示 0;1;2;3;4
五条记录。如果是第二页 pageNo = 2,pageNo * 5 5 = 5,我们就会
在第二页看到 5;6;7;8;9 五条记录。这样正好与我们预期的一致。
rs = state。executeQuery(〃select count(*) from bean〃);
最后记得要获得数据库中一共有几条记录,我们要用它来计算一共要分几
页。
计算方法是 count / 5 + 1,比如现在有 39 条记录,39 / 5 + 1 = 8,
一共分 8 页。
135 / 148
…………………………………………………………Page 136……………………………………………………………
经过 BeanServlet。java 的处理,request 里有三个变量,list 保存当前页面显
示的结果,pageNo 代表当前页码,count 代表数据库中一共有多少条记录,这三
个变量会在 query。jsp 中作为原始数据显示最终的结果。
没有数据
循环显示 list 中当前页面的数据并不是新鲜事物,我们只是判断了 list 是否存
在,list 里是否有数据,如果这两个条件不符合,就显示“没有数据”作为提
示。
下面是重头戏了,仔细研究一下如何使用 pageNo (当前页码)和count (数据总
数)显示出分页工具栏,虽然只是进行简单的四则运算,但要是平常不注意训练
算法,想一次写好也不容易。
分页栏部分的代码如下:
'第一页'
'上一页'
'第一页'
'上一
页'
'下一页'
'最后一页'
'下一
页'
'最后一
页'
137 / 148
…………………………………………………………Page 138……………………………………………………………
首先我们从 request 中取得pageNo (当前页码)和count (数据总数)两个变量,
为了下面计算简便先用它俩计算出总页数 int pageCount = count / 5 + 1; 。
if (pageNo == 1) {
%》
'第一页'
'上一页'
'第一页'
'上一
页'
这段代码生成“'第一页' '上一页'”,如果pageNo == 1 说明当前页已经是第
一页了,这时既不需要'第一页'这个链接,也不需要'上一页'了。对应的“'下
一页' '最后一页'”处理方法与之类似,只是判断条件要写成pageNo ==
pageCount,判断是否已经是最后一页了。
中间页码部分直接使用循环就能输出来,循环从 i = 1 开始直到 i
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!