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 | grade | |
1 | admin | admin | admin@sohu.com | 1 |
2 | weiya | 2323 | weiya@12.con | 1 |
3 | you | 23 | shfskj@132.com | 5 |