• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Servlet实现分页效果

java 搞代码 4年前 (2022-01-05) 38次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了Servlet实现分页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Servlet实现分页效果的具体代码,供大家参考,具体内容如下

分页的算法:

需要定义四个变量,它们有各自的用处
int pageSize:每页显示多少条记录
int pageNow:希望显示第几页
int pageCount:一共有多少页
int rowCount:一共有多少条记录

说明:

pageSize是指定,pageNow是指用户的选择。
rowCount是从表中查询得到的。
pageCount是计算出来的,该计算公式为:

 if(rowCount%pageSize==0) { pageCount=rowCount/pageSize; } else { pageCount=rowCount/pageSize+1; } 

如果使用语句:select 字段名列表 from 表名 where id between ? and ?
这个sql语句确实比较快,但是存在一个问题,即如果表的id被删除了,那么某页可能就会少一条记录。

因此,最终方法是如下语句:
select top pageSize 字段名列表 from 表名 where id not in(select top pageSize*(pageNow-1) id from 表名)

实现代码为:

 import javax.servlet.http.*; import java.io.*; import java.sql.*; public class fenye extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse res) { Connection ct=null; PreparedStatement ps=null; ResultSet rs=null; int pageSize=3; //希望每页显示记录的条数 int pageNow=1;  //初始化当前页为第一页 int pageCount=0; //总页数,需要通过计算得知 int rowCount=0; //记录总数,查表获知 String sPageNow=req.getParameter("pageNow"); //接收传递过来的当前页面 if(sPageNow!=null) //若接收到非空值,将其转为整数 { pageNow=Integer.parseInt(sPageNow); } try{ PrintWriter pw=res.getWriter(); Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); ct=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Students","sa","密码"); ps=ct.prepareStatement("select count(*) from [Students].[dbo].[Students]"); //获取表中记录总数 rs=ps.executeQuery(); while(rs.next()) { rowCount=rs.getInt(1); //获取表中记录总数 } if(rowCount%pageSize==0)  //计算总页面数 { pageCount=rowCount/pageSize; } else { pageCount=rowCount/pageSize+1; } ps=ct.prepareStatement("select top "+pageSize+" * from [Students].[dbo].[Students] where id not in(select top "+pageSize*(pageNow-1)+" id from [Students].[dbo].[Students])"); rs=ps.executeQuery(); pw.println("");  //将查询结果以表的形式展现 pw.println("<table border=1"); pw.println("<tr><th>id</th><th>name</th><th>grade</th></tr>"); while(rs.next()) { pw.println("<tr>"); pw.println("<td>"+rs.getInt(1)+"</td>"); pw.println("<td>"+rs.getString(2)+"</td>"); pw.println("<td>"+rs.getString(3)+"</td>"); pw.println("</tr>"); } pw.println("</table>"); if(pageNow==1)  //前一页超链接,当已经跳转到第一页时,页面不再改变 { pw.println(""+"forward"+""); } else   //未跳转到第一页时,每点击一次超链接,页面向前跳转一次 { pw.println(""+"forward"+""); } if(pageCount<=5) //控制显示页数超链接的个数 { for(int i=1;i<=pageCount;i++) { pw.println(""+i+""); } }else if(pageCount-pageNow<=5) { for(int i=pageNow;i<=pageCount;i++) pw.println(""+i+""); }else //当页面数过多时,为了页面美观需要控制显示超链接个数 { for(int i=pageNow;i<=pageNow+5;i++) pw.println(""+i+""); } if(pageNow==pageCount) //已经为最后一页时,点击后一页不再跳转 { pw.println(""+"backward"+""); } else { pw.println(""+"backward"+""); } pw.println(""); }catch(Exception ex){ ex.printStackTrace(); } } public void doPost(HttpServletRequest req,HttpServletResponse res) { this.doGet(req,res); } }

 执行结果:

来源gaodai$ma#com搞$代*码网当每页显示记录数为3时:

点击相应连接可以成功跳转。

最后一页显示为:

对应代码:

 if(pageCount<=5) { for(int i=1;i<=pageCount;i++) { pw.println(""+i+""); } } 

点击backward不再跳转。

为了显示程序控制页数超链接数目的效果如何,将每页显示记录数改为1。

第一页显示

对应代码:

 else { for(int i=pageNow;i<=pageNow+5;i++) pw.println(""+i+""); } 

当前页码逐渐增大时的显示

 

对应代码:

 else if(pageCount-pageNow<=5) { for(int i=pageNow;i<=pageCount;i++) pw.println(""+i+""); } 

以上就是Servlet实现分页效果的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Servlet实现分页效果

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址