index.jsp
上传用户:shjgzm
上传日期:2017-08-31
资源大小:2757k
文件大小:7k
源码类别:

Ajax

开发平台:

Java

  1. <%@ page contentType="text/html; charset=UTF-8"%>
  2. <%@ page language="java"%>
  3. <%@ page import="java.sql.*,ajax.db.DBUtils"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  8. <title>提前加载分页文章</title>
  9. <style type="text/css">
  10. /* 页面字体样式 */
  11. body, td, input {
  12.     font-family:Arial;
  13.     font-size:12px;
  14. }
  15. /* 表格基本样式 */
  16. table.default {
  17.     border-collapse:collapse;
  18. }
  19. /* 表格单元格样式 */
  20. table.default td {
  21.     border:1px solid black;
  22.     padding:3px;
  23.     height:27px;
  24. }
  25. /* 列头样式 */
  26. table.default td.item {
  27.     background:#006699;
  28.     color:#fff;
  29.     text-align:center;
  30. }
  31. /* 分页链接span样式 */
  32. span.pageLink {
  33.     font-size:12px;
  34.     margin:3px;
  35.     font-weight:bold;
  36.     padding:2px;
  37.     border:1px solid #003366;
  38. }
  39. /* 分页链接样式 */
  40. span.pageLink a {
  41.     color:#003366;
  42.     font-weight:normal;
  43.     text-decoration:none;
  44. }
  45. /* div统一样式 */
  46. div {
  47.     margin-top:10px;
  48. }
  49. /* 文章容器样式 */
  50. #container {
  51.     width:600px;
  52.     font-size:14px;
  53. }
  54. /* 分页div样式 */
  55. #pageDiv {
  56.     text-align:right;
  57. }
  58. </style>
  59. <script type="text/javascript">
  60. var xmlHttp;            //用于保存XMLHttpRequest对象的全局变量
  61. var cacheXmlHttp;       //用于保存缓存用XMLHttpRequest对象的全局变量
  62. var currId;             //保存当前文章编号
  63. var cachedId;           //用于保存缓存的文章编号
  64. var cachedPageNum = 0;  //缓存的文章页序号
  65. var cachedText;         //缓存的文章内容
  66. //用于创建XMLHttpRequest对象
  67. function createXmlHttp() {
  68.     //根据window.XMLHttpRequest对象是否存在使用不同的创建方式
  69.     if (window.XMLHttpRequest) {
  70.        xmlHttp = new XMLHttpRequest();                  //FireFox、Opera等浏览器支持的创建方式
  71.     } else {
  72.        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
  73.     }
  74. }
  75. //用于创建缓存用XMLHttpRequest对象
  76. function createCacheXmlHttp() {
  77.     //根据window.XMLHttpRequest对象是否存在使用不同的创建方式
  78.     if (window.XMLHttpRequest) {
  79.        cacheXmlHttp = new XMLHttpRequest();                  //FireFox、Opera等浏览器支持的创建方式
  80.     } else {
  81.        cacheXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
  82.     }
  83. }
  84. //获取文章信息
  85. function loadText(id, pageNum) {
  86.     currId = id;                                //设置当前加载文章编号
  87.     //如果页数信息不存在,默认设置为1
  88.     if (!pageNum) {
  89.         pageNum = 1;
  90.     }
  91.     //如果缓存命中,则直接从缓存读取
  92.     if (cachedId == id && cachedPageNum == pageNum) {
  93.         var result = cachedText;                //从缓存中获取文章信息
  94.         //结果前2位数为总页数,第3-4位为当前显示页数
  95.         var pageTotal = parseInt(result.substr(0,2),10);
  96.         var pageNum = parseInt(result.substr(2,2),10);
  97.         buildPageInfo(pageTotal, pageNum);      //根据总页数和当前页数建立各分页链接
  98.         var text = result.substr(4);            //去掉前4位,剩下的内容为文章部分
  99.         document.getElementById("textDiv").innerHTML = text;    //将文章写入页面
  100.         return;                                 //结束函数调用
  101.     }
  102.     createXmlHttp();                            //创建XmlHttpRequest对象
  103.     xmlHttp.onreadystatechange = showText;      //设置回调函数
  104.     xmlHttp.open("GET", "loadtext.jsp?id=" + id + "&pageNum=" + pageNum, true);
  105.     xmlHttp.send(null);
  106. }
  107. //显示加载的文章
  108. function showText() {
  109.     if (xmlHttp.readyState == 4) {
  110.         var result = xmlHttp.responseText;      //获取服务器响应结果
  111.         //结果前2位数为总页数,第3-4位为当前显示页数
  112.         var pageTotal = parseInt(result.substr(0,2),10);
  113.         var pageNum = parseInt(result.substr(2,2),10);
  114.         buildPageInfo(pageTotal, pageNum);      //根据总页数和当前页数建立各分页链接
  115.         var text = result.substr(4);            //去掉前4位,剩下的内容为文章部分
  116.         document.getElementById("textDiv").innerHTML = text;    //将文章写入页面
  117.     }
  118. }
  119. //根据总页数和当前页数建立各分页链接
  120. function buildPageInfo(pageTotal, pageNum) {
  121.     var pageInfo = "";                          //保存页面片断
  122.     //从1到总页数进行循环创建链接节点
  123.     for (var i=1; i<=pageTotal; i++) {
  124.         pageInfo += "<span class='pageLink'>";  //每个节点使用一个span
  125.         if (i==pageNum) {
  126.             pageInfo += pageNum;                //当前页无链接
  127.         } else {
  128.             pageInfo += "<a href='#' onclick='loadText(" + currId + "," + i + ")'>" + i + "</a>";
  129.         }
  130.         pageInfo += "</span>";
  131.     }
  132.     document.getElementById("pageDiv").innerHTML = pageInfo;    //将创建好的页面片断写入页面
  133.     //如果当前页面不是最后一页,缓存下一页内容
  134.     if (pageNum < pageTotal) {
  135.         cacheNextPage(currId, pageNum + 1);
  136.     }
  137. }
  138. //缓存下一页信息
  139. function cacheNextPage(id, pageNum) {
  140.     cachedId = id;                                   //保存缓存的id
  141.     cachedPageNum = pageNum;
  142.     createCacheXmlHttp();                            //创建XmlHttpRequest对象
  143.     cacheXmlHttp.onreadystatechange = saveCacheText; //设置回调函数
  144.     cacheXmlHttp.open("GET", "loadtext.jsp?id=" + id + "&pageNum=" + pageNum, true);
  145.     cacheXmlHttp.send(null);
  146. }
  147. //保存缓存文章信息
  148. function saveCacheText() {
  149.     if (cacheXmlHttp.readyState == 4) {
  150.         cachedText = cacheXmlHttp.responseText;     //将文章写入缓存变量
  151.     }
  152. }
  153. </script>
  154. </head>
  155. <body>
  156. <h1>提前加载分页文章</h1>
  157. <table class="default">
  158. <tr>
  159.     <td class="item">标题</td>
  160.     <td class="item">作者</td>
  161.     <td class="item">阅读</td>
  162. </tr>
  163. <%
  164.     String sql = "select id, title, author from articles";   //定义查询数据库的SQL语句
  165.     Connection conn = null;                 //声明Connection对象
  166.     PreparedStatement pstmt = null;         //声明PreparedStatement对象
  167.     ResultSet rs = null;                    //声明ResultSet对象
  168.     try {
  169.         conn = DBUtils.getConnection();     //获取数据库连接
  170.         pstmt = conn.prepareStatement(sql); //根据sql创建PreparedStatement
  171.         rs = pstmt.executeQuery();          //执行查询,返回结果集
  172.         while (rs.next()) {
  173.             %>
  174.             <tr>
  175.                 <td><%=rs.getString("title")%></td>
  176.                 <td><%=rs.getString("author")%></td>
  177.                 <td><input type="button" value="阅读" onclick="loadText(<%=rs.getString("id")%>)"></td>
  178.             </tr>
  179.             <%
  180.         }
  181.     } catch (SQLException e) {
  182.         System.out.println(e.toString());
  183.     } finally {
  184.         DBUtils.close(rs);                  //关闭结果集
  185.         DBUtils.close(pstmt);               //关闭PreparedStatement
  186.         DBUtils.close(conn);                //关闭连接
  187.     }
  188. %>
  189. </table>
  190. <div id="container">
  191. 文章内容:
  192. <div id="pageDiv"></div>
  193. <div id="textDiv"></div>
  194. </div>
  195. </body>
  196. </html>