在早期的 JSP 開發中,直接在頁面中撰寫 Java 程式碼(Scriptlet)是常見做法。本文整理一個經典範例,示範如何使用 JavaBean 連接 MySQL 資料庫,並實作簡單的分頁功能。雖然現代開發推薦使用 MVC 架構與連線池,但理解這些基礎概念有助於維護舊系統或學習核心原理。
範例中使用 ckstudio.db.MySQLconn 這個自訂的 JavaBean 來管理資料庫連線。在 JSP 頁面開頭透過 <jsp:useBean> 實例化:
<jsp:useBean id="mypage" class="ckstudio.db.MySQLconn" scope="page"/>
這個 Bean 封裝了 JDBC 連線細節,提供 executeQuery(sql) 方法直接傳回 ResultSet。
int PageSize = 5; // 每頁筆數
int ShowPage = 1; // 目前頁碼
int RowCount = 0; // 總筆數
int PageCount = 0; // 總頁數
int duoyu = 0; // 餘數
String sql = "SELECT * FROM member ORDER BY user_id DESC";
ResultSet rs = mypage.executeQuery(sql);
if (rs.next()) {
rs.last(); // 移至最後一筆
RowCount = rs.getRow(); // 取得總筆數
duoyu = RowCount % PageSize; // 計算餘數
if (duoyu == 0) {
PageCount = RowCount / PageSize;
} else {
PageCount = (RowCount - duoyu) / PageSize + 1;
}
}
String ToPage = request.getParameter("ToPage");
if (ToPage == null || ToPage.equals("")) ToPage = "1";
ShowPage = Cint(ToPage); // 自訂函式轉換整數
// 邊界檢查
if (ShowPage > PageCount) ShowPage = PageCount;
else if (ShowPage <= 0) ShowPage = 1;
rs.absolute((ShowPage - 1) * PageSize + 1);
int i = 1;
rs.previous(); // 因 absolute 移至第一筆,先 previous 讓 next() 能讀到第一筆
while (rs.next() && i <= PageSize) {
i++;
// 輸出欄位值
out.print(rs.getString(1) + " | ");
out.print(rs.getString(2) + " | ");
out.print(rs.getString(3) + " | ");
out.print(rs.getString(4) + "<br>");
}
頁面底部顯示「第 X 頁/共 Y 頁,Z 個用戶」,並提供首頁、上一頁、下一頁、末頁連結:
<form action="page.jsp" method="get">
第 <%=ShowPage%> 頁/共 <%=PageCount%> 頁,<%=RowCount%> 個用戶<br>
第 <input type="text" name="ToPage" size="2" maxlength="2"> 頁
<input type="submit" value="GO">
<a href="page.jsp?ToPage=1">首頁</a>
<% if (ShowPage > 1) { %>
<a href="page.jsp?ToPage=<%=ShowPage-1%>">上一頁</a>
<% } %>
<% if (ShowPage < PageCount) { %>
<a href="page.jsp?ToPage=<%=ShowPage+1%>">下一頁</a>
<% } %>
<a href="page.jsp?ToPage=<%=PageCount%>">末頁</a>
</form>
int Cint(String cint) {
try {
return Integer.parseInt(cint);
} catch (NumberFormatException e) {
return 0;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java"
import="java.sql.*,java.util.*" %>
<jsp:useBean id="mypage" class="ckstudio.db.MySQLconn" scope="page"/>
<%!
// Cint 函式定義在這裡
%>
<%
// 分頁邏輯與查詢
%>
<html>
<body>
<%
// 輸出資料迴圈
%>
<!-- 分頁導航表單 -->
<%
rs.close();
%>
</body>
</html>
finally 區塊關閉 ResultSet、Statement、ConnectionPreparedStatement 而非字串拼接rs.last() 需支援可捲動游標,大量資料時建議改用 COUNT(*) 查詢總筆數此範例展示了 JSP 早期開發的典型模式:在頁面中混合 Java 邏輯與 HTML 輸出。雖然不符合現代最佳實踐,但理解其運作機制對於維護舊專案、學習分頁核心算法仍有參考價值。