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

JSP + JavaBean + Servlet 三層架構工作原理實戰解析

     編輯:J2EE

架構演進:從兩層到三層

架構組成請求流向缺點
JSP + JavaBean(兩層)JSP(視圖+控制) + JavaBean(模型)瀏覽器 → JSP → JavaBean → JSP → 瀏覽器JSP 混雜邏輯與顯示,難以維護
JSP + JavaBean + Servlet(三層/MVC)Servlet(控制器) + JSP(視圖) + JavaBean(模型)瀏覽器 → Servlet → JavaBean → JSP → 瀏覽器職責清晰,利於分工與測試

核心組件職責

  • Servlet(Controller):接收請求、解析參數、協調業務邏輯、選擇視圖、管理 Session/Request 屬性。
  • JavaBean(Model):封裝業務邏輯、資料存取、運算規則,不依賴 Web 層 API。
  • JSP(View):專注頁面渲染,透過 EL/JSTL 讀取請求/會話屬性,避免 Scriptlet。

web.xml 請求映射機制

<servlet>
    <servlet-name>ms1</servlet-name>
    <servlet-class>news.FirstAction</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ms1</servlet-name>
    <url-pattern>/newsmain</url-pattern>
</servlet-mapping>

解析:/newsmain → ms1 → news.FirstAction。容器根據 URL Pattern 找到 Servlet 名稱,再映射至具體類。

Controller 實作範例:預處理與轉發

public class FirstAction extends HttpServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        DB db = new DB();
        HttpSession session = req.getSession();
        try {
            // 1. 業務邏輯預處理
            List list = News.SearchNewsTitle(db);
            // 2. 結果存入 Session
            session.setAttribute(Constants.NEWS_LIST_KEY, list);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            db.close();
        }
        // 3. 重導向至視圖頁
        resp.sendRedirect("/P43_News/newsMain.jsp");
    }
}

關鍵點:

  1. Servlet 負責「預處理」(資料查詢、運算),不生成 HTML。
  2. 結果放入 Session 或 Request 屬性,供 JSP 讀取。
  3. 使用 sendRedirect 或 RequestDispatcher.forward 轉向 JSP。

JSP 視圖層讀取資料

<%-- newsMain.jsp --%>
<table>
    <c:forEach items="${sessionScope.NEWS_LIST_KEY}" var="news">
        <tr><td>${news.title}</td><td>${news.date}</td></tr>
    </c:forEach>
</table>

使用 JSTL <c:forEach> 迭代,EL 表達式 ${...} 存取屬性,零 Java 代碼嵌入。

兩層 vs 三層核心差異

兩層:JSP 直接呼叫 News.SearchNewsTitle(db),業務邏輯耦合在頁面中。
三層:Servlet 完成預處理,JSP 僅負責「顯示」。Controller 隔離了變化:業務邏輯變更不影響視圖,視圖變更不影響控制流。

最佳實踐建議

  1. Servlet 單一職責:每個 Servlet 對應一個業務用例(如 ListAction、DetailAction)。
  2. 避免在 JSP 中使用 Scriptlet:全面改用 JSTL/EL,必要時建立自定義標籤。
  3. JavaBean 純粹化:不引入 HttpServletRequest 等 Web API,保持可單元測試。
  4. 統一異常處理:在 web.xml 配置 <error-page>,避免堆疊追蹤洩露給用戶。

總結

JSP + JavaBean + Servlet 三層架構是 Java Web 開發的經典基石。理解 web.xml 映射、Servlet 預處理模式、屬性傳遞與轉發機制,是進階框架學習的前提。現代框架本質上皆在此模型上封裝,掌握核心原理,方能舉一反三。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved