ajax与servlet的一个简单分页

 以前普通的分页翻页时都会刷新页,让人感觉真烦死了!

这里用了一个简单的用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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值