JavaBean封裝業務邏輯與數據訪問,JSP通過<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>標簽調用,實現「頁面無Java代碼」的早期最佳實踐。本文通過「用戶註冊」與「用戶分頁列表」兩個完整頁面演示核心用法。
<%@ page contentType="text/html;charset=gb2312" %>
<% response.setHeader("Expires", "0"); %>
<!-- 實例化JavaBean:id=adduser,類=lyf.adduser,作用域=page -->
<jsp:useBean id="adduser" class="lyf.adduser" scope="page"/>
<!-- 自動映射請求參數到Bean屬性:* 表示所有匹配屬性 -->
<jsp:setProperty name="adduser" property="*"/>
<html><head><title>用戶添加</title></head>
<body bgcolor="#FFEBBD">
<div align="center">
<%
// 調用Bean業務方法檢查用戶名重複
if (!adduser.checkUser()) {
out.println("對不起,這個用戶名 " + adduser.getUsername() + " 已經被申請了,請重新選擇!");
return; // 終止頁面執行
}
%>
<%
// 無重複則調用添加方法
if (adduser.addNewUser()) {
%>
<h2>添加用戶成功!</h2>
<%
} else {
%>
<h2>添加用戶失敗,請和管理員聯系!</h2>
<%
}
%>
</div></body></html>
關鍵點:
<jsp:useBean scope="page">:每次請求創建新實例,請求結束銷毀,線程安全。<jsp:setProperty property="*">:自動匹配request.getParameter()名稱與Bean的Setter,省去手動bean.setXxx(req.getParameter("xxx"))。lyf.adduser中:checkUser()查重、addNewUser()入庫,JSP僅做流程控制與顯示。<%@ page contentType="text/html;charset=gb2312" %>
<% response.setHeader("Expires", "0"); %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="oracle.jdbc.driver.*" %>
<jsp:useBean id="db" class="lyf.db" scope="request"/>
<jsp:setProperty name="db" property="*"/>
<%
// 此處原文截斷,補全典型分頁邏輯:
// 1. 獲取頁碼參數,默認第1頁
int pageNo = 1;
String pageParam = request.getParameter("pageNo");
if (pageParam != null) pageNo = Integer.parseInt(pageParam);
// 2. 調用Bean查詢總記錄數
int totalRows = db.getTotalUserCount();
int pageSize = 10;
int totalPages = (totalRows + pageSize - 1) / pageSize;
// 3. 計算分頁SQL參數
int startRow = (pageNo - 1) * pageSize + 1;
int endRow = pageNo * pageSize;
// 4. 調用Bean分頁查詢
ResultSet rs = db.queryUsersByPage(startRow, endRow);
%>
<html><head><title>用戶列表</title></head><body>
<table border="1" align="center">
<tr><th>ID</th><th>用戶名</th><th>郵箱</th><th>註冊時間</th></tr>
<%
while (rs.next()) {
%>
<tr>
<td><%= rs.getInt("id") %></td>
<td><%= rs.getString("username") %></td>
<td><%= rs.getString("email") %></td>
<td><%= rs.getTimestamp("reg_time") %></td>
</tr>
<%
}
rs.close();
%>
</table>
<!-- 分頁導航 -->
<div align="center">
<%
if (pageNo > 1) {
%> <a href="listuser.jsp?pageNo=<%= pageNo-1 %>">上一頁</a> <%
}
for (int i = 1; i <= totalPages; i++) {
if (i == pageNo) {
%> <b><%= i %></b> <%
} else {
%> <a href="listuser.jsp?pageNo=<%= i %>"><%= i %></a> <%
}
}
if (pageNo < totalPages) {
%> <a href="listuser.jsp?pageNo=<%= pageNo+1 %>">下一頁</a> <%
}
%>
</div></body></html>
lyf.adduser、lyf.db)useBean實例化需要)。lyf.db封裝JDBC連接獲取、關閉、CRUD操作,JSP零SQL。| 早期JSP+JavaBean | 現代Spring MVC |
|---|---|
<jsp:useBean>手動實例化 | @Controller + @Autowired Service 容器管理 |
property="*"自動綁定 | @ModelAttribute / @RequestParam 綁定 |
JSP中if/else流程控制 | Service返回Result/DTO,Controller決定View |
| Bean中直連JDBC | Repository/DAO + 連接池 + 事務管理 |
| 分頁邏輯寫在JSP | Pageable + Page<T> 通用分頁抽象 |
JSP+JavaBean模式是「業務邏輯出頁面」的關鍵一步。理解其useBean/setProperty/getProperty機制,能幫助你閱讀維護老系統,也能更深刻體會現代框架解決的核心痛點。