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

来源:互联网 发布:淘宝关键词优化工具 编辑:程序博客网 时间:2024/06/06 00:57
 

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

view plain
  1. public void process(HttpServletRequest req, HttpServletResponse res)  
  2.         throws ServletException, IOException {  
  3.     res.setContentType("text/html;charset=UTF-8");  
  4.     PrintWriter pw = res.getWriter();  
  5.     Connection ct = null;  
  6.     PreparedStatement ps = null;  
  7.     ResultSet rs = null;  
  8.     try {  
  9.         // 从session中得到用户名  
  10.         HttpSession hs = req.getSession(true);  
  11.         String myName = (String) hs.getAttribute("name");  
  12.   
  13.         if (myName == null) {  
  14.             // 返回登陆界面  
  15.             res.sendRedirect("login?info=error1");  
  16.             return;  
  17.         }  
  18.         // 调整格式  
  19.         pw.println("<body><center>");  
  20.         // 在servlet中显示图片  
  21.         pw.println("<img src="images/lola.gif" mce_src="images/lola.gif"><br>");  
  22.         pw.println("Welcom,hello<br>");  
  23.         pw.println("你的用户名是:" + myName);  
  24.         // 做个超链接  
  25.         pw.println("<br><a href="login" mce_href="login">返回重新登录</a>");  
  26.   
  27.         // ================分页功能===============  
  28.         int pageSize = 3;// 一页显示几条记录(规定)  
  29.         int pageNow = 1;// 希望显示第几页(规定)  
  30.         int rowCount = 0;// 共有几条记录(查表)  
  31.         int pageCount = 0;// 共有几页(计算)  
  32.   
  33.         // 动态的接收pageNow  
  34.         String sPageNow = req.getParameter("pageNow");  
  35.         if (sPageNow != null) {  
  36.             pageNow = Integer.parseInt(sPageNow);// 转换成整数  
  37.         }  
  38.   
  39.         // 首先得到rowCount  
  40.         // 连接数据库  
  41.         Class.forName("com.mysql.jdbc.Driver");// 加载驱动  
  42.         // 得到连接  
  43.         ct = DriverManager.getConnection(  
  44.                 "jdbc:mysql://localhost:3306/spdb""root""root");  
  45.         ps = ct.prepareStatement("select count(*) from users");  
  46.         rs = ps.executeQuery();  
  47.         if (rs.next()) {  
  48.             rowCount = rs.getInt(1);  
  49.         }  
  50.         // 计算pageCount  
  51.         if (rowCount % pageSize == 0) {  
  52.             pageCount = rowCount / pageSize;  
  53.         } else {  
  54.             pageCount = rowCount / pageSize + 1;  
  55.         }  
  56.         ps = ct.prepareStatement("select * from users limit "  
  57.                 + (pageNow - 1) * pageSize + "," + pageSize);  
  58.         // 给问号赋值  
  59.         // ps.setInt(1,(pageNow-1)*pageSize);  
  60.         // ps.setInt(2,pageSize );  
  61.         rs = ps.executeQuery();  
  62.         // 表头  
  63.         pw.println("<table border=1>");  
  64.         pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");  
  65.         while (rs.next()) {  
  66.             pw.println("<tr>");  
  67.             pw.println("<td>" + rs.getInt(1) + "</td>");  
  68.             pw.println("<td>" + rs.getString(2) + "</td>");  
  69.             pw.println("<td>" + rs.getString(3) + "</td>");  
  70.             pw.println("<td>" + rs.getString(4) + "</td>");  
  71.             pw.println("<td>" + rs.getInt(5) + "</td>");  
  72.             pw.println("</tr>");  
  73.         }  
  74.         pw.println("</table>");  
  75.         // ================分页功能===============  
  76.   
  77.         // 上一页  
  78.         if (pageNow != 1) {  
  79.             pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow - 1)  
  80.                     + ">上一页</a>");  
  81.         }  
  82.         // 显示超链接  
  83.         // for (int i = 1; i <= pageCount; i++) {  
  84.         for (int i = pageNow; i <= pageNow + 4; i++) {  
  85.             pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + i + ">" + i + "</a>");  
  86.         }  
  87.         if (pageNow != pageCount) {  
  88.             pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow + 1)  
  89.                     + ">下一页</a>");  
  90.         }  
  91.         pw.println("</center></body>");  
  92.   
  93.         // String u = req.getParameter("uname");// 得到从LoginCl传递的用户名  
  94.         // String p = req.getParameter("pass");  
  95.     } catch (Exception ex) {  
  96.         ex.printStackTrace();  
  97.     }  
  98. }  

原创粉丝点击