关闭

(第6讲)servlet 分页技术

94人阅读 评论(0) 收藏 举报
分类:

1、需要定义四个变量:

int pageSize: 每页显示多少条记录  是指定的

int pageNow: 希望显示第几页    是用户选择的

int rowCount: 一共有多少条记录  是从表中查询得到的

int pageCount: 一共有多少页   是计算出来的,公式为:

   if(rowCount%pageSize==0){

            pageCount = rowCount/pageSize;

   }else{

           pageCount = rowCount/pageSize+1;

   }

例子:有用户表,

         共9条记录,即rowCount = 9;

     如果: 每页显示3条记录,即pageSize=3;

               那么根据我们的算法可得:pageCount=9/3=3;即一共3页

     如果: 每页显示4条记录,即pageSize=4; 根据现实情况,一共9条记录,每页4条,共三页,最后一页1条记录。

               那么根据我们的算法可得:pageCount=9/4+1=3;即一共3页

不管怎样都是正确的。

2、如果要从数据库查出第三页的数据

select * from users where userId between 4 and 6;

用上边的语句可以查出来,但是有一个问题:如果删除掉4到6中的一个,那么分页的时候第二页上就只有两条记录

改正方法:

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 userId  )意思是先排除掉6条,然后取3条,就是第三页

以我们前面的users表为例,要显示第2页,该查询语句就是:

select top 3 * from users  where userId  not in (select top  3  userId  from userId  )意思是先排除掉3条,然后取3条,就是第二页的内容了

以我们前面的users表为例,要显示第1页,该查询语句就是:

select top 3 * from users  where userId  not in (select top  0  userId  from userId  )意思是先排除掉0条,然后取3条,就是第1页的内容了
                                           在web页面中登录,然后查看分页显示

在登录页面输入正确的用户名和密码,提交之后显示第一页的内容,程序如下:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/**
 *   登录界面
 */
package com.weiya;
import javax.servlet.http.*;
import java.io.*;
//解决乱码问题,只要把编码方式改一下就行
public class page1 extends HttpServlet{
      public void doGet(HttpServletRequest req,HttpServletResponse res)
      {
          try{


              //解决中文乱码,解决方法一
              res.setContentType("text/html;charset=UTF-8");
              PrintWriter pw = res.getWriter();
              //返回登录界面
              pw.print("<html>");
              pw.print("<body>");
              //得到error信息
              String info2 = req.getParameter("info");
               if(info2==null){

               }else{
                   pw.println("<h1>你的用户名或密码错误</h1>");
               }
            pw.print("<h1>登录界面</h1>");
              pw.print("<form action=page2  method=post>");//action后边写URL
              pw.print("用户名:<input type=text name=uname><br>");
              pw.print("  </input ><br>");
              pw.print("密码:<input type=password name=pword><br>");
              pw.print("  </input ><br>");
              pw.print("  <input type=submit  value= 提交><br>");
              pw.print("  </input ><br>");
              pw.print("</form>");

              pw.print("</body>");
              pw.print("</html>");
          }catch(Exception e){
              e.printStackTrace();
          }
      }
      public void doPost(HttpServletRequest req,HttpServletResponse res)
      {
          this.doGet(req,res);
      }
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/**
 * 用户验证Servlet
 */
package    com.weiya;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class page2     extends HttpServlet{
    public void    doGet(HttpServletRequest req,  HttpServletResponse res){
        this.doPost(req,res);
    }

    public void    doPost(HttpServletRequest req,    HttpServletResponse    res){
        Connection    ct = null;
         Statement sm = null;
          ResultSet rs = null;
        try{
            //解决中文乱码,解决方法一
            res.setContentType("text/html;charset=UTF-8");
             //得到用户提交的用户名和密码
             String    u =    req.getParameter("uname");
             String    p =    req.getParameter("pword");

             if(u.equals("admin") && p.equals("123")){
                         //往会话对象中添加信息(用户名)
                        HttpSession    hs = req.getSession(true);//得到session
                           hs.setMaxInactiveInterval(30);//修改session的存在时间
                        hs.setAttribute("name",u);
                        res.sendRedirect("page3?uname="+u+"&upass="+p);
             }else{
                     res.sendRedirect("page1") ;
            }
         }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/**
 * 欢迎界面
 */
package  com.weiya;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class page3 extends HttpServlet{
     public void doGet(HttpServletRequest req,HttpServletResponse res){
        //查数据库
            Connection    ct = null;
        PreparedStatement ps = null;
  ResultSet rs = null;

        try{


                res.setContentType("text/html;charset=UTF-8");
                 PrintWriter pw = res.getWriter();

                     //得到从LoginC中传递的用户名
                String u = req.getParameter("uname");
                String p = req.getParameter("upass");

                 pw.print("欢迎 " +u+" pass="+p);
            //获得会话对象中信息
                 HttpSession hs = req.getSession(true);
                 String name = (String)hs.getAttribute("name");
                 if(name==null){
                     res.sendRedirect("page1?info=error1");
                     return;
                 }
                 //------------分页功能------------------
                 //四个变量
                 int pageSize = 3;//一页显示几条记录
                 int pageNow = 1;//希望显示第几页
                 int rowCount = 0;//共有几条记录(查表得到的)
                 int pageCount = 0;//共有几页(计算出来的)
                 //动态的接受pageNow
                 String spage = req.getParameter("pageNowC");
                 if(spage==null){
                     //用户第一次进入page3页面,不用改pageNow
                 }else{
                     pageNow = Integer.parseInt(spage);
                 }

                 //得到rowCount
                 //1、加载驱动
                 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                 //2、得到链接
                 ct = DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","");
                ps = ct.prepareStatement("select count(*) from users");
                rs= ps.executeQuery();
                if(rs.next()){
                    rowCount = rs.getInt(1);
                }
                //计算pageCount
                if(rowCount%pageSize==0){
                    pageCount = rowCount/pageSize;
                }else{
                        pageCount = rowCount/pageSize+1;
                }
                ps = ct.prepareStatement("select top "+pageSize+"  * from users where useId not in (select  top   "+pageSize*(pageNow-1)+" *(pageNow-1)   useId  from users)");
                 //给?赋值
             //    ps.setInt(1,pageSize);//给第一个?赋值
             //    ps.setInt(2,pageSize*(pageNow-1));//给第2个?赋值
                 //查询
                 rs = ps.executeQuery();
                 pw.println("<table border=1>");
                 pw.println("<tr><th>id</th><th>name</th><th>password</th><th>mail</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("<td>"+rs.getString(4)+"</td>");
                    pw.println("<td>"+rs.getInt(5)+"</td>");
                    pw.println("</tr>");
                }
                pw.println("</table>");
                //显示超链接
                for(int i=1;i<pageCount;i++){
                    pw.println("<a href=page3?pageNowC="+i+">"+i+"</a>");
                }

        }catch(Exception e){
             e.printStackTrace();
         }



     }
        public void doPost(HttpServletRequest req,HttpServletResponse res){
         this.doGet(req,res);
     }

}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

部署文件如下:

<!--page1开始-->
    <servlet>
        <servlet-name>page1</servlet-name>    <!--给你的servlet取名字,名字是任意的,且不是必须的-->
        <servlet-class>com.weiya.page1</servlet-class>  <!-- 指明servlet路径,即包名+类名-->
    </servlet>
    <servlet-mapping>
        <servlet-name>page1</servlet-name>   <!-- 与上边的映射,复制下来-->
         <url-pattern>/page1</url-pattern>    <!-- 这是在浏览器中输入的访问该servlet的URL-->
    </servlet-mapping>
 
    <servlet>
        <servlet-name>page2</servlet-name>    <!--给你的servlet取名字,名字是任意的,且不是必须的-->
        <servlet-class>com.weiya.page2</servlet-class>  <!-- 指明servlet路径,即包名+类名-->
    </servlet>
    <servlet-mapping>
        <servlet-name>page2</servlet-name>   <!-- 与上边的映射,复制下来-->
         <url-pattern>/page2</url-pattern>    <!-- 这是在浏览器中输入的访问该servlet的URL-->
    </servlet-mapping>
 
    <servlet>
        <servlet-name>page3</servlet-name>    <!--给你的servlet取名字,名字是任意的,且不是必须的-->
        <servlet-class>com.weiya.page3</servlet-class>  <!-- 指明servlet路径,即包名+类名-->
    </servlet>
    <servlet-mapping>
        <servlet-name>page3</servlet-name>   <!-- 与上边的映射,复制下来-->
         <url-pattern>/page3</url-pattern>    <!-- 这是在浏览器中输入的访问该servlet的URL-->
    </servlet-mapping>
<!--page3结束-->

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在网站中访问:http://localhost:8080/myWebSite/page1,可以看到浏览器输出:


登录界面

用户名:

密码:

输入正确的用户名和密码,点击提交,浏览器显示分页之后的第一页:

id name password mail grade
1 admin admin admin@sohu.com 1
2 weiya 2323 weiya@12.con 1
3 you 23 shfskj@132.com 5
1  2  3  4  5


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42422次
    • 积分:1260
    • 等级:
    • 排名:千里之外
    • 原创:85篇
    • 转载:20篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论