以前普通的分页翻页时都会刷新页,让人感觉真烦死了!
这里用了一个简单的用ajax+servlet+JDBC + sqlserver实现的分页 !
首先建一个表 这里建了一个Student表
if exists(select * from sysobjects where name='Student')
drop table Student
go
create table Student
(
[id] int not null identity(1,1) primary key,
[name] varchar(20) not null,
[age] int not null,
[sex] varchar(4) not null
)
go
insert into student values('aa1',2,'男')
insert into student values('aa5',23,'男')
insert into student values('aa4',24,'男')
insert into student values('aa3',245,'男')
insert into student values('aa1',26,'男')
insert into student values('aaa',24,'男')
insert into student values('aasadf',23,'男')
//这里是数据类
package mystudent;
import java.sql.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Data {
public Data() {
}
static private Connection con;
static private PreparedStatement ps;
static private ResultSet rs;
static synchronized public Connection getConnection() {
new com.microsoft.jdbc.sqlserver.SQLServerDriver();
try {
con = DriverManager.getConnection( "jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs","sa", "sa");
// Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// con = DriverManager.getConnection("jdbc:odbc:test");
} catch (SQLException ex) {
ex.printStackTrace();
}
catch(Exception a)
{
a.printStackTrace();
}
return con;
}
//进行查询的
static synchronized public ResultSet ExecuteQuery(String sql) {
if (con == null) {
getConnection();
}
try {
ps = con.prepareStatement(sql, 1004, 1008);
rs = ps.executeQuery();
return rs;
} catch (SQLException ex) {
ex.printStackTrace();
return null;
}
}
/**
关闭联接
*/
static synchronized public void CloseCon() {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
if (con != null) {
con.close();
con = null;
}
} catch (SQLException ex1) {
ex1.printStackTrace();
}
}
}
//这里是实体类
package mystudent;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Student {
private String name;
private int age;
private String sex;
private int id;
public Student() {
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSex() {
return sex;
}
public int getId() {
return id;
}
}
//用来实现分页
package mystudent;
import java.sql.*;
import java.util.ArrayList;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Pagination {
public Pagination() {
}
private int pageMaxRows; //当前页行数
private int curPage = 1; //当前页数
private int maxPage; //最大页数
private int maxRowCount; //最大行数
private String tableName; //得到当前的表明
public static ResultSet rs;
public static ArrayList ary;
/**
*得到所有的行数
* @return int 所有的行数
*/
private int pageCount() {
int count = 0;
try {
ResultSet rs = Data.ExecuteQuery("select * from " + tableName);
rs.last();
count = rs.getRow();
this.setMaxRowCount(count);
return count;
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
Data.CloseCon();
}
return 0;
}
/**
* 得到总行数
* 最大页数
* 一共多少页
*/
public void setPageBean() {
this.setMaxRowCount(pageCount());
if (this.getMaxRowCount() % this.pageMaxRows == 0) {
this.setMaxPage(this.getMaxRowCount() / this.pageMaxRows);
} else {
this.setMaxPage(this.getMaxRowCount() / this.pageMaxRows + 1);
}
}
/**
*
* @param current int 当前页
* @param tableName String 表名
* @return Pagination 当前类的对象
*/
public static Pagination Select(int current, String tableName,int pageMaxRows) {
Pagination dat = new Pagination();
//反名子得到
dat.tableName = tableName;
//得到当前多少页
dat.setPageMaxRows(pageMaxRows);
//得到所有的页数
dat.setPageBean();
try {
rs = Data.ExecuteQuery("select top " + dat.pageMaxRows + " * from " +
tableName + " where id not in (select top " +
(current-1) * dat.pageMaxRows + " id from " +
tableName + " )");
dat.setCurPage(current);
} catch (Exception ex) {
ex.printStackTrace();
}
return dat;
}
public int getCurPage() {
return curPage;
}
public int getMaxPage() {
return maxPage;
}
public int getMaxRowCount() {
return maxRowCount;
}
public int getPageMaxRows() {
return pageMaxRows;
}
public void setCurPage(int curPage) {
this.curPage = curPage;
}
public void setMaxPage(int maxPage) {
this.maxPage = maxPage;
}
public void setMaxRowCount(int maxRowCount) {
this.maxRowCount = maxRowCount;
}
public void setPageMaxRows(int pageMaxRows) {
this.pageMaxRows = pageMaxRows;
}
}
//DAO
package mystudent;
import java.util.*;
import java.sql.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class StudentDAO {
public StudentDAO() {
}
public static Pagination getSlect(int current,String tableName,int pageMaxRows)
{
Pagination pag=Pagination.Select(current,tableName,pageMaxRows);
ResultSet rs=pag.rs;
ArrayList ary=new ArrayList();
try {
while (rs.next()) {
Student s=new Student();
s.setId(rs.getInt(1));
s.setName(rs.getString(2));
s.setAge(rs.getInt(3));
s.setSex(rs.getString(4));
ary.add(s);
}
pag.ary=ary;
} catch (SQLException ex) {
ex.printStackTrace();
}
finally
{
Data.CloseCon();
}
return pag;
}
}
//业务层
package mystudent;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class StudentBus {
public StudentBus() {
}
public static Pagination getSelect(int current,String tableName,int pageMaxRows)
{
return StudentDAO.getSlect(current,tableName,pageMaxRows);
}
}
//Servlet
package mystudent;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class StudentServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/xml; charset=GBK";
//Initialize global variables
public void init() throws ServletException {
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType(CONTENT_TYPE);
String curPage = request.getParameter("page");
ArrayList ary = null;
Pagination dat = null;
if (curPage != null) {
dat = StudentBus.getSelect(Integer.parseInt(curPage), "student", 2);
ary = dat.ary;
} else {
dat = StudentBus.getSelect(1, "student", 2);
ary = dat.ary;
}
//清除缓存
response.addHeader("Expires", "0");
response.addHeader("Cache-Control", "no-store,must-revalidate");
response.addHeader("Cache-Control", "post-check=0,pre-check=0");
response.addHeader("Pragma", "no-cache");
PrintWriter out = response.getWriter();
out.println("<?xml version=/"1.0/" encoding=/"gb2312/"?>");
out.println("<root>");
for (int i = 0; i < ary.size(); i++) {
out.println("<result>");
Student st = (Student) ary.get(i);
out.println("<name>" + st.getName() + "</name>");
out.println("<age>" + st.getAge() + "</age>");
out.println("<sex>" + st.getSex() + "</sex>");
out.println("</result>");
}
out.println("<info>");
//共多少页
out.println("<maxPage>" + dat.getMaxPage() + "</maxPage>");
//第多少页
out.println("<curPage>" + dat.getCurPage() + "</curPage>");
//共多少行
out.println("<maxRowCount>" + dat.getMaxRowCount() + "</maxRowCount>");
//每页多少行
out.println("<pageMaxRows>" + dat.getPageMaxRows() + "</pageMaxRows>");
out.println("</info>");
out.println("</root>");
out.close();
}
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
//Clean up resources
public void destroy() {
}
}
//jsp页面
<%@page contentType="text/html; charset=GBK"%>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@taglib uri="/WEB-INF/struts-nested.tld" prefix="nested"%>
<%@taglib uri="/WEB-INF/struts-template.tld" prefix="template"%>
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<link href="/Student/web.css" _fcksavedurl=""/Student/web.css"" _fcksavedurl=""/Student/web.css"" _fcksavedurl=""/Student/web.css"" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#ffffff">
<form action="" method="POST">
<div id="pagDiv1">
<table id="pagTable" border="1" align="center">
<tbody id="pagTbody">
</tbody>
</table>
</div>
<div>
<table id="pagTable1" border="1" align="center">
<tbody id="pageTbody1">
</tbody>
</table>
</div>
<div id="pagDiv2">
<table align="center">
<tbody id="pageTbody2">
</tbody>
</table>
</div>
</form>
</body>
<script type="text/javascript" language="javascript">
var xmlHttp;
var pageMaxRows; //当前页行数
var curPage; //当前页数
var maxPage; //最大页数
var maxRowCount; //最大行数
var pagDiv;//div
var pagTable;//table
var pagTbody;//tbody
var pagTbody1;//显示页数的tbody
var pageTbody2;
function createXMLHttpRequest()
{
if(window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
xmlHttp=new XMLHttpRequest();
}
}
//初始化
function init()
{
pagDiv=document.getElementById("pagDiv1");
pagTable=document.getElementById("pagTable");
pagTbody=document.getElementById("pagTbody");
pagTbody1=document.getElementById("pageTbody1");
pageTbody2=document.getElementById("pageTbody2");
}
function getValue(page)
{
createXMLHttpRequest();
//调用初始化
init();
var url="studentservlet?page="+page+"&a="+new Date().getTime();
xmlHttp.open("post",url,true);
xmlHttp.setRequestHeader("Context-type","application/3-www-form-urlencoded");
xmlHttp.onreadystatechange=call;
xmlHttp.send(null);
}
function call()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
setValue(xmlHttp.responseXML);
}
else
{
alert(xmlHttp.status);
}
}
}
function setValue(xml)
{
var result=xml.getElementsByTagName("result");
//当前页行数
pageMaxRows=xml.getElementsByTagName("pageMaxRows")[0].firstChild.nodeValue;
//得到当前页
curPage=xml.getElementsByTagName("curPage")[0].firstChild.nodeValue;
//得到最大页
maxPage=xml.getElementsByTagName("maxPage")[0].firstChild.nodeValue;
//得到最大行数
maxRowCount=xml.getElementsByTagName("maxRowCount")[0].firstChild.nodeValue;
if(result.length>0)
{
//先清除所有的数据
clearRow();
clearRow1();
clearRow2();
//插入所有的数据
for(var i=0;i<result.length;i++)
{
var rows=document.createElement("tr");
rows.appendChild(createRow(result[i].childNodes[0].firstChild.nodeValue));
rows.appendChild(createRow(result[i].childNodes[1].firstChild.nodeValue));
rows.appendChild(createRow(result[i].childNodes[2].firstChild.nodeValue));
pagTbody.appendChild(rows);
// alert(unescape(result[i].childNodes[2].firstChild.nodeValue));
}
var row=document.createElement("tr");
//当前页行数
var td=document.createElement("td");
td.appendChild(document.createTextNode('每页'+pageMaxRows+'行'));
row.appendChild(td);
//得到当前页
var td1=document.createElement("td");
td1.appendChild(document.createTextNode('第'+curPage+'页'));
row.appendChild(td1);
//得到最大页
var td2=document.createElement("td");
td2.appendChild(document.createTextNode('共'+maxPage+'页'));
row.appendChild(td2);
//得到最大行数
var td3=document.createElement("td");
td3.appendChild(document.createTextNode('共'+maxRowCount+'行'));
row.appendChild(td3);
//加进去
pagTbody1.appendChild(row);
var pagerow=document.createElement("tr");
if(parseInt(curPage)==1)
{
var td=document.createElement("td");
td.appendChild(document.createTextNode("首页"));
var td1=document.createElement("td");
td1.appendChild(document.createTextNode("上一页"));
pagerow.appendChild(td);
pagerow.appendChild(td1);
}
else
{
//首页
var td=document.createElement("td");
var a=document.createElement("a");
a.setAttribute("href","#");
a.onclick=function ()
{
getValue(1);
}
a.appendChild(document.createTextNode("首页"))
td.appendChild(a);
//上一页
var td1=document.createElement("td");
var a1=document.createElement("a");
a1.setAttribute("href","#");
a1.onclick=function ()
{
getValue(parseInt(curPage)-1);
}
a1.appendChild(document.createTextNode("上一页"))
td1.appendChild(a1);
pagerow.appendChild(td);
pagerow.appendChild(td1);
}
if(parseInt(curPage)==parseInt(maxPage))
{
var td=document.createElement("td");
td.appendChild(document.createTextNode("上一页"));
var td1=document.createElement("td");
td1.appendChild(document.createTextNode("尾页"));
pagerow.appendChild(td);
pagerow.appendChild(td1);
}
else
{
//下一页
var td=document.createElement("td");
var a=document.createElement("a");
a.setAttribute("href","#");
a.onclick=function ()
{
getValue(parseInt(curPage)+1);
}
a.appendChild(document.createTextNode("下一页"))
td.appendChild(a);
//尾页
var td1=document.createElement("td");
var a1=document.createElement("a");
a1.setAttribute("href","#");
a1.onclick=function ()
{
getValue(parseInt(maxPage));
}
a1.appendChild(document.createTextNode("尾页"))
td1.appendChild(a1);
pagerow.appendChild(td);
pagerow.appendChild(td1);
}
pageTbody2.appendChild(pagerow);
}
else
{
alert('没有数据');
}
}
//得到所有的列
function createRow(cell)
{
var Cell=document.createElement("td");
var text=document.createTextNode(cell);
Cell.appendChild(text);
return Cell;
}
//删除所有列数据显示区
function clearRow()
{
if(pagTbody.hasChildNodes())
{
for(var i=pagTbody.childNodes.length-1;i>=0;i--)
{
pagTbody.removeChild(pagTbody.childNodes[i]);
}
}
}
//删除最大页数区
function clearRow1()
{
if(pagTbody1.hasChildNodes())
{
for(var i=pagTbody1.childNodes.length-1;i>=0;i--)
{
pagTbody1.removeChild(pagTbody1.childNodes[i]);
}
}
}
//删除最大页数区上一页下一页区
function clearRow2()
{
if(pageTbody2.hasChildNodes())
{
for(var i=pageTbody2.childNodes.length-1;i>=0;i--)
{
pageTbody2.removeChild(pageTbody2.childNodes[i]);
}
}
}
getValue(1);
</script>
</html>
有问题:QQ 418556605