友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

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 
返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!