本文通過完整購物網站案例,演示 J2EE 企業級應用全生命週期開發:環境搭建 (Oracle/WebLogic/JBuilder)、數據庫設計、分層架構實現、部署驗證。雖技術棧歷史久遠,但工程化思維、分層設計、配置管理經驗具備永恆參考價值。
一、開發平台搭建 (歷史版本參考)
| 組件 | 版本 | 關鍵配置 |
| OS | Windows 2000 SP3 | P4 1.7GHz / 256MB RAM |
| JDK | 1.4.2_06 | `JAVA_HOME`、`PATH` |
| Oracle | 8i/9i | P4 機器安裝 8i 需修改 `symcJit.dll`、`oraparam.ini` |
| WebLogic | 6.1 SP2 | JDBC Connection Pool + DataSource (JNDI: `oradb`) |
| JBuilder | 7 WebLogic 版 | 整合 WebLogic、內存調優 (`-Xmx256m`)、字體設定 (新宋體) |
二、Oracle 8i 安裝關鍵點 (P4 兼容性修正)
- 拷貝安裝源到本地臨時目錄
- 重命名 `stage/Components/Oracle.swd.Jre1.1.7.301/DataFiles/Expanded/Jre/Windows/32/bin/symcJit.dll` → `symcJit.old` (含 OEM 目錄下同名文件)
- 修改 `oraparam.ini`:`JRE_MEMORY_OPTIONS=-noJit -ms16m -mx32m`
- 自定義安裝、不建立數據庫
- 安裝後修改所有 `.cl` 文件 (如 `dbassist.cl`),Java 命令添加 `-noJit` 參數
- 使用 Database Configuration Assistant 建庫,記錄 Global Database Name (如 `oradb`)
三、WebLogic 數據源配置
- 啟動 WebLogic,進入 Console (System/密碼)
- Services → JDBC → Connection Pools → Configure New:
- Name: `mytest`
- URL: `jdbc:weblogic:oracle`
- Driver: `weblogic.jdbc.oci.Driver`
- Properties: `user=system` `password=manager` `server=oradb`
- Targets → Servers: 選中當前 Server
- Data Sources → Configure New:
- Name/Pool Name: `mytest`
- JNDI Name: `oradb`
- Targets → Servers: 選中當前 Server
- 驗證:啟動日誌出現 `JDriver/Oracle` 字樣
四、JBuilder 整合 WebLogic
- Tools → Configure Servers → WebLogic 6.x-7.0 → Enable
- Home/Working Directory 指向 WebLogic 域目錄
- Custom → JDK Installation Dir、BEA Home Dir
- Domain Name、Server Name、密碼填寫正確
- 驗證:新建 Web Application → 生成 WAR → 發布 → 瀏覽器訪問成功
五、購物網站數據庫設計
5.1 表結構設計
| 表名 | 用途 | 核心字段 |
| ITEM | 商品類別 | TYPE_ID (PK)、TYPE (VARCHAR2(30)) |
| PRODUCT | 商品信息 | PRODUCT_ID (PK)、TITLE、TYPE_ID (FK→ITEM)、INFO、PRICE (NUMBER(16,2)) |
| ORDERS | 訂單記錄 | ORDER_ID (PK)、NAME、ADDRESS、TEL、EMAIL、BTIME (DATE)、PRODUCT_ID (FK)、UWORD |
| ADMIN | 管理員 | ADMIN_ID (PK)、ADMINNAME、PASSWORD |
5.2 關聯與序列
-- 主鍵/外鍵
ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_FK FOREIGN KEY (TYPE_ID) REFERENCES ITEM(TYPE_ID);
ALTER TABLE ORDERS ADD CONSTRAINT ORDERS_FK FOREIGN KEY (PRODUCT_ID) REFERENCES PRODUCT(PRODUCT_ID);
-- Oracle 序列替代自增
CREATE SEQUENCE TYPE_ID INCREMENT BY 1 START WITH 1;
CREATE SEQUENCE PRODUCT_ID INCREMENT BY 1 START WITH 1;
CREATE SEQUENCE ORDER_ID INCREMENT BY 1 START WITH 1;
CREATE SEQUENCE ADMIN_ID INCREMENT BY 1 START WITH 1;
-- 使用方式
INSERT INTO ITEM (TYPE_ID, TYPE) VALUES (TYPE_ID.NEXTVAL, '電子產品');
INSERT INTO PRODUCT (PRODUCT_ID, TITLE, TYPE_ID, INFO, PRICE)
VALUES (PRODUCT_ID.NEXTVAL, '筆記本', TYPE_ID.CURRVAL, '高性能', 5999.00);
5.3 完整建表腳本
CREATE TABLE ITEM (
TYPE_ID INTEGER NOT NULL,
TYPE VARCHAR2(30),
CONSTRAINT ITEM_PK PRIMARY KEY (TYPE_ID)
);
CREATE TABLE PRODUCT (
PRODUCT_ID INTEGER NOT NULL,
TITLE VARCHAR2(30) NOT NULL,
TYPE_ID INTEGER NOT NULL,
INFO VARCHAR2(80),
PRICE NUMBER(16,2) NOT NULL,
CONSTRAINT PRODUCT_PK PRIMARY KEY (PRODUCT_ID),
CONSTRAINT PRODUCT_FK FOREIGN KEY (TYPE_ID) REFERENCES ITEM(TYPE_ID)
);
CREATE TABLE ORDERS (
ORDER_ID INTEGER NOT NULL,
NAME VARCHAR2(20) NOT NULL,
ADDRESS VARCHAR2(100),
TEL NUMBER(16),
EMAIL VARCHAR2(30) NOT NULL,
BTIME DATE,
PRODUCT_ID INTEGER NOT NULL,
UWORD VARCHAR2(100),
CONSTRAINT ORDERS_PK PRIMARY KEY (ORDER_ID),
CONSTRAINT ORDERS_FK FOREIGN KEY (PRODUCT_ID) REFERENCES PRODUCT(PRODUCT_ID)
);
CREATE TABLE ADMIN (
ADMIN_ID INTEGER NOT NULL,
ADMINNAME VARCHAR2(20) NOT NULL,
PASSWORD VARCHAR2(20) NOT NULL,
CONSTRAINT ADMIN_PK PRIMARY KEY (ADMIN_ID)
);
六、Oracle SQL 基礎與數據類型速查
SQL 四大類
- DQL (查詢):`SELECT ... FROM ... WHERE ...`
- DML (操縱):`INSERT`、`UPDATE`、`DELETE`、`MERGE`
- DDL (定義):`CREATE/ALTER/DROP TABLE|INDEX|VIEW|SEQUENCE`
- DCL (控制):`GRANT/REVOKE`、`COMMIT/ROLLBACK`、`SAVEPOINT`
常用數據類型
| 類別 | 類型 | 特點 |
| 字符 | VARCHAR2(n) | 變長、最大 4000 字節、最常用 |
| 字符 | CHAR(n) | 定長、最大 2000 字節、不足補空格 |
| 數值 | NUMBER(p,s) | 精度 p、標度 s、整數/小數通用 |
| 日期 | DATE | 含年月日時分秒、預設 DD-MON-YY |
| 大對象 | BLOB/CLOB/NCLOB | 內部存儲、最大 4GB、圖片/文檔/文本 |
| 大對象 | BFILE | 外部文件引用、最大 4GB |
| 其他 | ROWID | 行物理地址偽列、唯一標識 |
七、現代化重構指南 (將歷史經驗映射到當前技術棧)
| 歷史組件 | 現代替代 | 核心價值傳承 |
| JBuilder | IntelliJ IDEA / VS Code | IDE 整合調試、重構、版本控制 |
| WebLogic 6.1 | Spring Boot 3.x / WildFly / OpenLiberty | 容器管理 Bean、事務、資源、部署 |
| Oracle 8i/9i | Oracle 19c/21c / PostgreSQL / MySQL 8.0 | 關係數據庫、ACID、SQL 標準 |
| JSP/Servlet | Spring MVC / Spring WebFlux / Thymeleaf / React/Vue | Web 端點、請求處理、視圖渲染 |
| EJB 2.x | Spring Bean + @Transactional / JPA | 聲明式事務、依賴注入、POJO 開發 |
| 手工序列 | Identity/Sequence/UUID / 雪花算法 | 主鍵生成策略 |
| JDBC 直連 | HikariCP + MyBatis/JPA/jOOQ | 連線池、ORM/類型安全 SQL |
| WAR 部署 | Docker Image / JAR (Spring Boot) / Kubernetes | 不可變基礎設施、雲原生交付 |
八、工程化核心經驗總結
- 環境標準化:腳本化/容器化安裝配置,消除「在我機器上能跑」
- 數據庫先行:ER 圖 → 建表腳本 → 版本控制 (Flyway/Liquibase) → 代碼生成
- 分層解耦:Controller/Service/Repository 清晰分離,數據表示物件邊界嚴守
- 配置外部化:環境差異零代碼變更 (Spring Profiles / Config Server / K8s ConfigMap)
- 自動化驗證:單元/整合/契約/效能測試納入 CI 流水線
- 可觀測性內建:日誌/指標/鏈路追蹤從第一行代碼開始
總結
購物網站案例展示了 J2EE 開發全景:基礎設施就緒 → 數據模型落地 → 分層架構實現 → 部署驗證閉環。技術棧會過時,但工程化思維、分層設計原則、配置管理規範、自動化交付理念永不過時。現代開發者應在 Spring Boot/Cloud、容器化、雲原生體系下傳承並發揚這些核心價值。