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

ASP 開發者邁向 J2EE 實戰指南(下):核心技術與架構對比

     編輯:Java 相關知識

從 ASP/COM 到 J2EE 的思維轉換

ASP 開發者習慣於腳本式、進程內組件模型,而 J2EE 強調容器管理的多層架構。本文對應 ASP 模式,系統講解 Servlet、JSP、JDBC、狀態管理等核心技術。

Servlet:請求處理的核心控制器

生命週期與執行模型

  • 單實例、多執行緒:容器載入一個 Servlet 實例,每請求一條執行緒調用 service() → doGet/doPost()。
  • 上下文根對應 IIS 虛擬目錄,URL 格式:/contextRoot/ServletName。

關鍵介面

  • HttpServletRequest:封裝請求參數、Header、Session 等。
  • HttpServletResponse:控制回應碼、輸出流、Cookie、重導向。

JSP:動態視圖模板引擎

編譯與執行

JSP 首次訪問編譯為 Servlet,後續直接執行。支援指令(`<%@ %>`)、宣告(`<%! %>`)、Scriptlet(`<% %>`)、表達式(`<%= %>`)。

隱含物件速查

變量類型用途
requestHttpServletRequest請求參數與屬性
responseHttpServletResponse回應控制
outPrintWriter輸出內容
sessionHttpSession會話屬性
applicationServletContext應用層共享數據
pageContextPageContext頁面層級數據

架構演進三部曲:登入案例實戰

1. 義大利麵代碼(單一 JSP 混雜邏輯)

同 ASP 混合 HTML/VBScript,僅供教學,生產環境禁止。

2. 改良版:Servlet 控制器 + JSP 視圖

  • LoginServlet 處理 POST、驗證、重導向。
  • login.jsp 僅含表單 HTML,action 指向 Servlet。

缺點:驗證邏輯仍耦合在 Servlet,多頁復用需複製代碼。

3. 純淨 MVC:業務邏輯獨立為 POJO

// 獨立業務類
package com.ibm.businessobjects;
public class UserValidation {
    public boolean validate(String username, String password) { ... }
}

// Servlet 僅作薄控制器
UserValidation validator = new UserValidation();
if (validator.validate(userName, password)) { ... }

優勢:邏輯可單測、可替換實現(JDBC/EJB/Web Service/JMS/JCA)、支援非 Web 環境復用。

JDBC 與連線池:廠商中立的資料存取

標準步驟

  1. Class.forName("driverClass") 載入驅動
  2. DriverManager.getConnection(url, user, pwd) 獲取連線
  3. Statement/PreparedStatement 執行 SQL
  4. ResultSet 遍歷結果
  5. conn.close() 釋放資源

連線池模式(生產必備)

應用伺服器配置 DataSource,經 JNDI 查找:

DataSource ds = (DataSource) new InitialContext().lookup("jdbc/MyDS");
Connection conn = ds.getConnection(); // 借用
// ... 操作
conn.close(); // 歸還池中

優點:效能、可管理性、洩漏回收、支援分散式事務(搭配 EJB/JTA)。

狀態管理:精準選擇四大作用域

原則:數據存活越短越好。Servlet 需手動 req.getSession(),JSP 自動提供 session 隱含物件。

JSP 中操作範例

<%
session.setAttribute("user", userObj);      // 會話層
application.setAttribute("config", cfg);    // 應用層
request.setAttribute("msg", "歡迎");         // 請求層
pageContext.setAttribute("tmp", val);       // 頁面層
%>

Servlet 中操作

HttpSession session = req.getSession(true);
ServletContext app = getServletContext();
session.setAttribute("key", val);
app.setAttribute("key", val);
req.setAttribute("key", val);

程式化導航:三種機制靈活控制流程

方式機制數據共享URL 變化
sendRedirect客戶端 302 重導向需 Session/Application改變
forward伺服器端轉發共享 Request不變
include包含輸出共享 Request不變

JSP 標籤式導航

<jsp:forward page="target.jsp"/>
<jsp:include page="fragment.jsp" flush="true"/>

Cookie 管理

// 建立持久 Cookie
Cookie ck = new Cookie("pref", "darkMode");
ck.setMaxAge(60*60*24*30); // 30 天
response.addCookie(ck);

// 讀取
Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie c : cookies) { ... }
}

總結

掌握 Servlet/JSP 協作、MVC 分層、JDBC 連線池、作用域選擇與導航機制,ASP 開發者即可平滑過渡到 J2EE 企業級開發。後續建議深入 EJB、JMS、JTA、JCA 等企業級規格,構建高可用、可擴展的分散式系統。

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