servlet学习笔记5——分页实现(登录网站的完善)

Servlet第四讲
(一)如何在servlet中显示图片
    在webapps下建立一个文件夹images,然后拷贝图片到此文件下,在servlet中添加:<img src=images/lola.jpg>即可

(二)分页技术详解

 

 

2.1分页方法一
先讲分页算法
需要定义四个变量:
int pageSize:每页显示多少条记录
int pageCount:一共有多少页
int pageNow:希望显示第几页
int rowCount:一共有多少条记录

 

 

说明:
pageSize是指定的
pageNow是用户选择的
rowCount是从表中查询得到的
pageCount是计算出来的:计算方法——
      if(rowCount%pageSize==0){
          pageCount=rowCount/pageSize;
     }else{
          pageCount=rowCount/pageSize+1;
     }
举例说明:
有用户表共9条记录:rowCount=9;
每页显示3条记录:pageSize=3;
那么根据我们的算法:pageSize=3刚好不多不少
如果每页显示4条记录:pageSize=4 那么pageCount=3,那么最后一页只有一条记录,所以,不管怎样都是正确的

 

2.2分页方法二
针对前面提出的问题,用
select 字段名列表 from 表名 where id between ? and ?
以前面的users表为例,显示第三页,该查询语句就是:
select * from users where userId between 7 and 9
这个sql语句确实是比较快,但是它有一个问题,就是如果表的id被删除,那么,某页可能就会少一个记录

解决方案:
ms sqlserver数据库
select top pageSize 字段名列表 from 表名 where id not in
(select top pageSize*(pageNow-1) id from 表名)
以users表为例,显示第三页,查询语句为:
select top 3 * from users where userId not in
(select top 6 userId from users)

 

My sql数据库
        My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为:
         SELECT * FROM 表名称 LIMIT M,N

          例如从表Sys_option(主键为sys_id)中从第10条记录后开始检索20条记录,语句如下:
         select * from sys_option limit 10,20

快速为表增加记录:
insert into users (username,passwd,email,grade) select username,passwd,email,grade from users;

(三)用户登录系统功能改进

参考代码:Wel.java


单从表现层来说分页不是一个复杂的工作,稍微理一下思路,处于不同competence level的同学应该都能自己搞出来。 以上面的文章列表分页为例,我觉得分页有两点重要的, 一是:分页我们必须首先自己搞清楚,文章总数、每页显示文章数(页大小)、页数 二是:如何做好页脚的分页导航条 实际应用中,文章总数这个值我们从数据库可以得到;每页显示的文章数即分页的页大小可以自己定义;页数我们可以通过下面的个表达式简单得出。 假设: int pageSize = 10; //分页大小 int totalPosts = PagingDAO.entryList.size(); //总文章数 int totalPages = totalPosts/pageSize + ((totalPosts%pageSize)>0?1:0); //计算得出的总页数 每页的文章怎么取出来? 知道分页的大小之后,我们生成了页好的选取下拉框,每次选择第几页的时候,都会向Servlet传递当前选择页号的参数,这样Servlet调用后面的DAO相应的方法,取得文章列表信息,再回传到JSP以供显示。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> page Size : ${pageSize} <br /> Total Posts: ${totalPosts} <br /> Total Pages: ${totalPages} <br /> Current Page: ${pageNumber} <hr /> <table> <thead> <tr align="center"> <td width="10%">Article ID</td> <td width="70%">Article Title</td> <td colspan="3">Actions</td> </tr> </thead> <tbody> <c:forEach items="${entryList}" var="entry"> <tr align="center"> <td>${entry.entryID}</td> <td>${entry.title}</td> <td><a href="viewEntry?entryID=${entry.entryID}">View</a></td> <td><a href="editEntry?entryID=${entry.entryID}">Edit</a></td> <td><a href="deleteEntry?entryID=${entry.entryID}">Delete</a></td> </tr> </c:forEach> </tbody> <tfoot> <tr align="center"> <td colspan="5"> <jsp:include page="paging_footer.jsp"></jsp:include> </td> </tr> </tfoot> </table> <hr/>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值