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

無框架架構模式探討:輕量化 Java EE 開發實踐

     編輯:J2EE

前言:Java EE 的複雜性困境

Java EE 向來被開發者視為「龐然大物」,其技術體系雖全面規整,但過度的複雜性讓許多廠商卻步,寧選 PHP、Ruby on Rails 或 .NET 等輕量級技術。這反映出業界對「快速開發」的迫切需求。Servlet、JavaBean、JDBC 等基礎規範雖奠定了組件與容器標準,但 JSF、JDO 等高階規範未能建立統一框架標準,導致開發者不得不自行整合 Struts、Spring、Hibernate 等開源框架(即經典 SSH 組合),這不僅增加學習成本,也帶來配置地獄與設計風險。

控制層:拋棄前端控制器,擁抱 Ajax + JSP

傳統模式的痛點

在 JSP Model 2 中,Servlet 擔任控制器,但存在請求轉向隱藏重複提交、重定向參數編碼、轉向地址硬編碼等問題,且無法像 JSP 那樣自動將表單數據綁定到 JavaBean。

框架方案的局限

Struts 以 Front Controller 模式解耦視圖與控制,提供 ActionForm 處理表單綁定、國際化、標籤庫等功能,但配置繁瑣,且 ActionForm 需手動轉換為領域模型,定位尷尬。

無框架新選擇:JSP 作為輕量控制器

作者提出「雙 JSP 模式」:worker_input.jsp 負責視圖,worker_inputOper.jsp 處理控制邏輯,兩者分工明確,無需 XML 配置。結合 Ajax 異步交互,客戶端負責視圖更新與導航,伺服器端僅需 out.print(JSON) 回應,徹底消除結果頁面配置。預處理改用 Filter 實現,輕量高效。

<jsp:useBean id="worker" class="webappdemo.worker.entity.Worker" scope="page"/>
<jsp:setProperty name="worker" property="*"/>
<%
    String method = request.getParameter("method");
    if ("save".equals(method)) {
        EntityService es = new EntityService();
        Message m = es.add(worker);
        out.print(new JSONObject().put(m.isSucceed() ? "succeed" : "error", m.getMessage()));
        return;
    }
%>

此模式利用 JSP 內建 <jsp:useBean> 實現表單數據自動裝配到領域模型,強制統一表單欄位與屬性命名,省去 ActionForm 轉換層。異常處理採用 web.xml 定義錯誤頁面,簡潔實用。

持久層:手寫 ORM 行為,輕量替代 Hibernate

JDBC 的繁瑣與 Hibernate 的門檻

JDBC 需手動管理資源、異常、事務,重複代碼多;Hibernate 雖強大,但需深厚關係模型、SQL 與 O/R 映射功力,否則易成「洪水猛獸」。

自定義 IOper 接口模擬 ORM

定義 IOper 接口封裝 CRUD,實體類實現該接口,內部使用 SQLBuffer 構建 SQL,配合 Proxy 工具類執行:

public interface IOper {
    boolean load(Connection conn) throws SQLException;
    boolean add(Connection conn) throws SQLException;
    boolean update(Connection conn) throws SQLException;
    boolean delete(Connection conn) throws SQLException;
}

public class Worker implements IOper {
    // 欄位、構造器、getter/setter 略
    public boolean add(Connection conn) throws SQLException {
        SQLBuffer sql = new SQLBuffer();
        sql.segment("insert into worker (worker_name,logon_name,logon_pwd,mobile,email,remark,is_freeze) values (");
        sql.value(this.workerName).comma().value(this.logonName).comma().value(this.logonPwd)
           .comma().value(this.mobile).comma().value(this.email).comma().value(this.remark).comma().value(this.isFreeze);
        sql.segment(")");
        return Proxy.update(conn, sql) == 1;
    }
    // load/update/delete 同理...
}

服務層 EntityService 統一管理事務邊界(獲取連接、關閉自動提交、提交/回滾、關閉連接),業務邏輯只需:

EntityService es = new EntityService();
Message m = es.add(worker);

此法將繁瑣 JDBC 代碼集中於實體與服務兩層,結構清晰,SQL 直觀可控,避免外部映射文件維護成本。對於資料庫遷移需求較少的企業應用,此方案足矣。

視圖層:客戶端 MVC 與前端工程化

隨著 Web 2.0 與 RIA 興起,JSF 價值下降。作者提倡「客戶端 MVC」:HTML(DOM)為 Model,CSS 為 View,JavaScript 為 Controller,三者分離為獨立文件(.jsp、.js、.css),提升可讀性。JSP 僅作視圖模板,允許少量內聯事件綁定(如 onclick="save()"),務實為主。

目錄結構與模組化

WebRoot/
  module/           # 所有視圖與控制 JSP
    common/         # 共用資源
      CSS/, img/, JS/, import_page.def
    worker/         # 員工模組功能文件
  404.jsp, 500.jsp, index.htm
src/
  webappdemo/
    common/, worker/  # 與 WebRoot 結構對應
  datasource.xml, log4j.properties

統一目錄結構便於 Filter 統一攔截與資源管理,import_page.def 集中引入 CSS/JS 庫,避免部署時版本變更麻煩。

結語

無框架不等於無結構。透過編碼約定、Ajax 交互、輕量 ORM 模擬與客戶端 MVC,僅用 Servlet/JSP/JDBC 基礎規範即可構建可維護、低門檻、快速迭代的企業級應用。技術無絕對優劣,關鍵在於適度取捨與團隊執行力。

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