在網路上尋找 Struts 分頁方案時,發現多數實作要么耦合度過高,要么效能不佳。基於實務經驗,本文提出一套結構清晰、效能優異的分頁架構,核心在於將資料存取邏輯與分頁控制邏輯徹底解耦,避免一次性載入海量資料造成記憶體壓力。
本範例採用:JBuilder X + WebLogic 8.1 + Oracle 9i + Windows Server 2003。但架構設計不依賴特定環境,可輕鬆移植至其他技術棧。
分頁功能同樣遵循 MVC 模式,六大模組各司其職:
以 TCertificate 表為例,建立對應的值物件 CertificateVO,封裝證書編號、名稱、照片路徑、描述、畢業生 ID 等欄位。
採用基底類別 CommonDAO 統一管理資料庫連線、關閉、交易回滾等通用邏輯,子類別 CertificateDAO 專注於具體查詢。關鍵方法 findCertificateList(offset, limit) 僅撈取當頁所需記錄,配合 rsHandler 在 ResultSet 層面直接定位游標,避免全量載入。
public List findCertificateList(int offset, int limit) throws SQLException {
// 僅建立當頁資料的 ArrayList,透過 rs2VO 封裝 VO,保持方法精簡
// 使用 if (rs != null && rs.next()) 配合 while 迴圈,兼顧健壯性與效能
}
Pager 類別獨立於 DAO,僅接收 offset、totalRows、pageSize、actionUrl 四個參數,產生分頁導航 HTML 片段。這樣 DAO 只負責「查資料」,Pager 只負責「算頁碼」,兩者零耦合。
CertificateAction 協調全局流程:
DataSource 取得連線並實例化 DAOpager.offset 計算當前偏移量Pager.generate() 產生分頁字串list 與 pager 放入 request 轉向 JSPlistcertificate.jsp 使用 Struts 標籤庫(logic:iterate、bean:write)渲染資料表格,分頁導航直接輸出 ${pager},零 Java 程式碼混入。
在 struts-config.xml 定義 /graduatedata/list 對應 CertificateAction,參數 LIST 驅動 performList(),成功轉向 listcertificate.jsp。
文中已包含 CommonDAO、CertificateDAO、CertificateAction、listcertificate.jsp、struts-config.xml、Pager 六大核心檔案完整原始碼,可直接參考專案導入。