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

J2EE 企業級應用實戰:Servlet 與 Session Bean 協作的四層架構範例

     編輯:Java 程式設計入門

前言:J2EE 平台與瘦客戶端多層架構

J2EE (Java 2 Platform, Enterprise Edition) 整合 EJB、Servlet、JSP、JNDI、XML 等技術,支援瘦客戶端(瀏覽器+HTML)多層架構。本文以 J2EE SDK 1.2.1 為環境,完整演示從 HTML 輸入 → Servlet 控制 → Session Bean 業務邏輯 → 結果回顯的四層協作流程。

環境建置與配置

安裝路徑設定 (Windows 2000)

  • J2EE SDK: C:\J2EE\j2sdkee1.2.1
  • J2SE: C:\J2EE\jdk1.2.2

環境變數配置

PATH: %J2EE_HOME%\bin;%JAVA_HOME%\bin
CLASSPATH: %J2EE_HOME%\lib\j2ee.jar
J2EE_HOME: C:\J2EE\j2sdkee1.2.1
JAVA_HOME: C:\J2EE\jdk1.2.2

應用程式組件結構

J2EE 定義四類組件:應用客戶端、EJB、Web 組件、Applet。本例建立:

  • HTML 頁面 + Servlet → 打包為 WAR (Web Archive)
  • Session Bean (介面+實作) → 打包為 JAR
  • WAR + JAR → 組裝為 EAR (Enterprise Archive) 部署

角色分工:開發者寫 Bean/Servlet,組裝者打包部署,可由不同人員在不同階段完成。

程式碼實作詳解

1. HTML 前端:bonus.html

<FORM METHOD="GET" ACTION="BonusAlias">
  Enter social security Number: <INPUT TYPE="TEXT" NAME="SOCSEC">
  Enter Multiplier: <INPUT TYPE="TEXT" NAME="MULTIPLIER">
  <INPUT TYPE="SUBMIT" VALUE="Submit">
</FORM>

表單提交至 BonusAlias(部署時映射至 BonusServlet)。

2. 控制層:BonusServlet.java

public class BonusServlet extends HttpServlet {
    private CalcHome homecalc;

    public void init(ServletConfig config) throws ServletException {
        try {
            InitialContext ctx = new InitialContext();
            Object objref = ctx.lookup("calcs");  // JNDI 查找 Home 介面
            homecalc = (CalcHome) PortableRemoteObject.narrow(objref, CalcHome.class);
        } catch (Exception e) { e.printStackTrace(); }
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        try {
            String socsec = request.getParameter("SOCSEC");
            int multiplier = Integer.parseInt(request.getParameter("MULTIPLIER"));
            
            Calc calculation = homecalc.create();  // 建立 Bean 實例
            double calc = calculation.calcBonus(multiplier, 100.00);  // 呼叫業務方法
            
            // 輸出結果頁面
            out.println("<H1>Bonus Calculation</H1>");
            out.println("Soc Sec: " + socsec + "<br>");
            out.println("Multiplier: " + multiplier + "<br>");
            out.println("Bonus Amount: " + calc + "<br>");
        } catch (Exception e) { e.printStackTrace(); }
        out.close();
    }
}

關鍵技術點

  • JNDI 查找:ctx.lookup("calcs") 取得 Home 介面參考
  • RMI-IIOP 窄化:PortableRemoteObject.narrow() 確保型別安全
  • 異常處理:catch 區塊至少 printStackTrace(),不可留空
  • Servlet 生命週期:init() 查找 Bean,doGet() 處理請求,destroy() 清理

3. 業務層:Session Bean 三件套

Home 介面:CalcHome.java

package Beans;
public interface CalcHome extends EJBHome {
    Calc create() throws CreateException, RemoteException;
}

Remote 介面:Calc.java

package Beans;
public interface Calc extends EJBObject {
    double calcBonus(int multiplier, double bonus) throws RemoteException;
}

Bean 實作:CalcBean.java

package Beans;
public class CalcBean implements SessionBean {
    public double calcBonus(int multiplier, double bonus) {
        return multiplier * bonus;  // 核心業務邏輯
    }
    // 容器回調方法(本例無需自訂邏輯,保留空實作)
    public void ejbCreate() {}
    public void setSessionContext(SessionContext ctx) {}
    public void ejbRemove() {}
    public void ejbActivate() {}
    public void ejbPassivate() {}
    public void ejbLoad() {}
    public void ejbStore() {}
}

Session Bean 特性

  • 代表短暫用戶會話,容器管理生命週期
  • 非持久化:崩潰後可重新初始化計算
  • 適合無狀態或會話級有狀態業務邏輯

架構層次說明

層次組件職責
第 1 層 (客戶端)HTML + 瀏覽器輸入/顯示
第 2 層 (Web 層)Servlet請求分發、JNDI 查找、結果渲染
第 3 層 (EJB 層)Session Bean核心業務計算
第 4 層 (資料層)資料庫 (下例擴展)持久化儲存

最佳實踐提醒

  • 所有遠端呼叫包裝 try-catch,記錄堆疊追蹤
  • JNDI 名稱與部署描述檔一致
  • Bean 遠端介面拋出 RemoteException
  • Home 介面 create() 拋出 CreateException、RemoteException
  • 開發/組裝/部署角色分離,利於團隊協作

總結

此範例完整展示 J2EE 四層架構核心協作:Servlet 作為 Web 層控制器,委派業務邏輯給 Session Bean,實現關注點分離。雖技術版本較舊 (J2EE 1.2),但「薄 Servlet、厚 EJB」分層思想、JNDI 查找、RMI-IIOP 遠端調用、容器管理生命週期等核心概念,在現代 Jakarta EE / Spring Boot 微服務架構中依然延續演化。

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