【JSP 實戰教學】使用 Top.jsp 與 Bottom.jsp 管理使用者 Session 狀態(含範例與歷史脈絡)
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1116
本文教你如何在傳統 JSP 系統中使用 Top.jsp
與 Bottom.jsp
來維護使用者登入狀態與頁面流程。這種設計在大量政府與企業內部系統中仍廣泛使用,是維護舊系統的重要知識。
🔍 為什麼需要 Top.jsp 與 Bottom.jsp?
在早期 JSP 系統中,沒有現代框架、沒有過濾器(Filter),一切都靠你自己控制。每次進入一個 JSP 頁面,都要自行判斷使用者是否已登入、是否可以存取該頁。這樣就產生了大量重複程式碼。
為了解決這個問題,開發者將這些「共通邏輯」抽出來:
檔案 | 功能說明 |
---|---|
Top.jsp |
在每個頁面開頭 include,負責從 Session 讀取使用者狀態,必要時自動初始化 |
Bottom.jsp |
在每個頁面結尾 include,將使用者狀態寫回 Session,確保後續頁面能使用 |
這就是「Top–Bottom 包夾設計模式」,至今仍在許多系統穩定運作中。
🧱 範例專案結構
AppManager.java // 用來記錄登入者資訊
Top.jsp // 頁首共通邏輯:初始化狀態
Bottom.jsp // 頁尾共通邏輯:寫回狀態
Blog.jsp // 模擬一個部落格主頁
✅ AppManager.java – 管理登入者資訊
// 負責保存登入者狀態的 Java 類別
public class AppManager {
private String username;
public AppManager(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
// Session 中的儲存 key
public static final String NAME = "AppManager";
}
⬆️ Top.jsp – 頁首邏輯:取得或建立狀態
<%@ page import="AppManager" %>
<%
// 從 Session 取得登入者資訊(如不存在,初始化為訪客)
AppManager manager = (AppManager) session.getAttribute(AppManager.NAME);
if (manager == null) {
manager = new AppManager("訪客"); // 實務中應由 Login.jsp 建立
session.setAttribute(AppManager.NAME, manager);
}
// 此處可擴充流程驗證,例如是否已登入、是否具備權限等
%>
⬇️ Bottom.jsp – 頁尾邏輯:寫回狀態
<%
// 確保 manager 寫回 Session,保存任何中途的變更
session.setAttribute(AppManager.NAME, manager);
%>
📄 Blog.jsp – 實際使用頁面
<%@ include file="Top.jsp" %>
<html>
<head>
<title>JSP 部落格首頁 - 管理使用者狀態</title>
<meta name="description" content="教你如何用 Top.jsp 與 Bottom.jsp 在 JSP 系統中正確管理使用者 Session 狀態,維護登入流程與頁面邏輯。" />
</head>
<body style="font-family:sans-serif">
<h1>我的 JSP 部落格</h1>
<%
// Top.jsp 中已初始化 manager,這裡直接使用
AppManager manager = (AppManager) session.getAttribute(AppManager.NAME);
%>
<p>目前登入者:<strong><%= manager.getUsername() %></strong></p>
<!-- 這裡可展示文章列表、留言、上傳功能等 -->
<%@ include file="Bottom.jsp" %>
</body>
</html>
📌 為什麼一定要寫 Bottom.jsp?
如果沒有 Bottom.jsp,會發生什麼? | 結果 |
---|---|
修改過 manager(例如使用者名稱、流程狀態) | 不會被保存,下一頁會還原 |
多頁流程控制需要持續狀態(如審核流程) | 狀態中斷,流程錯誤 |
頁面不穩定,Session 中出現 null 或過時的狀態 | 報錯或強制返回登入頁 |
🕰️ Top.jsp/Bottom.jsp 的歷史與設計背景
這種寫法不是偶然,而是早期 Java Web 系統的產物。以下是設計背景摘要:
時期 | 背景說明 |
---|---|
1999–2002 | JSP 與 Servlet 剛問世,開發者需自行管理 Session 與流程邏輯。 |
2002–2006 | 成為老系統的主流實作模式,用來支撐登入邏輯與頁面流程控制。 |
2006–今 | 雖然現代系統已採用框架,但仍有大量老系統沿用此設計並穩定運作。 |
✅ 總結:這是一套可持續維護的 JSP 管理模式
檔案名 | 功能重點 |
---|---|
Top.jsp |
初始化登入資訊、流程驗證 |
Bottom.jsp |
寫回狀態,保存修改 |
AppManager |
保存在 Session 中的狀態容器 |
Blog.jsp |
實際頁面,專注展示,不處理共通邏輯 |
這套設計不依賴任何現代框架,易懂、好維護、可擴充。如果你正在維護類似系統,它依然是非常實用的解法。
📌 延伸建議:若你有數十個頁面都需要用到相同邏輯,建議統一用 Top.jsp
/ Bottom.jsp
包夾模式,可極大減少錯誤與重複程式碼。
This article was last edited at