首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

高效能 JSP 分頁程式實作(含下拉頁碼跳轉、首頁/尾頁、上下頁)

     編輯:關於JSP

前端 JavaScript 控制

<script>
function gopage() { document.listpage.submit(); }
function previouspage() {
    var p = parseInt(document.listpage.page.value);
    if (p > 1) { document.listpage.page.value = p-1; document.listpage.submit(); }
}
function nextpage() {
    document.listpage.page.value = parseInt(document.listpage.page.value)+1;
    document.listpage.submit();
}
function gopagebyno(no) {
    document.listpage.page.value = no;
    document.listpage.submit();
}
</script>

後端邏輯(JSP 內嵌 JDBC,示範用)

<%
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String dbPath = application.getRealPath("/db/mydb.mdb");
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+dbPath;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection(url);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery("SELECT * FROM mytable");

// 計算總筆數、總頁數
rs.last(); int total = rs.getRow();
int pageSize = 10;
int totalPages = (total + pageSize - 1) / pageSize;
int curPage = (request.getParameter("page")!=null)? Integer.parseInt(request.getParameter("page")) : 1;

// 定位到當前頁第一筆
if (curPage == 1) rs.first();
else rs.absolute((curPage-1)*pageSize + 1);

// 輸出資料列
int count = 0;
while (!rs.isAfterLast() && count < pageSize) {
%>
    <tr>
        <td><%= rs.getString("col1") %></td>
        <td><%= rs.getString("col2") %></td>
        <td>
            <input type="button" value="刪除" onclick="actiondo('del','<%=rs.getString("id")%>','<%=curPage%>')">
            <input type="button" value="編輯" onclick="actiondo('edit','<%=rs.getString("id")%>','<%=curPage%>')">
        </td>
    </tr>
<%
    rs.next(); count++;
}
rs.close(); stmt.close(); conn.close();
%>

分頁導覽列輸出

<form name="listpage">
    頁次: <b><%=curPage%></b>/<b><%=totalPages%></b>
    <% if (curPage!=1) { %> <a href="javascript:gopagebyno(1)">首頁</a> <% } else { %> 首頁 <% } %>
    <% if (curPage!=1) { %> <a href="javascript:previouspage()">上頁</a> <% } else { %> 上頁 <% } %>
    <% if (curPage

優化建議

  • 資料庫層面分頁:MySQL LIMIT offset, size、Oracle ROWNUM、SQL Server ROW_NUMBER(),避免全表掃描。
  • 連線池:使用 DataSource(JNDI)替代直連。
  • MVC 分離:邏輯移至 Servlet/Service,JSP 僅渲染。
  • 快取總筆數:若資料變動不頻繁,可快取 total 減少 COUNT(*) 查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved