執行
外觀
| 導航 入門 主題: |
Java 程式碼可以以多種方式執行。複雜的 Java 應用程式通常使用第三方 API 或服務。在本節中,我們列出了打包和/或執行 Java 程式碼的最常用方法。
Java 語言第一版出現在客戶端-伺服器時代。使用豐富的 GUI 介面開發了胖客戶端。Java 第一個版本 JSE(Java 標準版)在其工具包中擁有/擁有以下功能
- GUI 功能(AWT、Swing)
- 網路計算功能(RMI)
- 多工功能(執行緒)
使用 JSE,可以進行以下 Java 程式碼執行

- 獨立 Java 應用程式
- (圖 1)獨立應用程式是指使用者介面和業務模組都在同一臺計算機上執行的 Java 程式。應用程式可能使用也可能不使用資料庫來持久化資料。使用者介面可以是 AWT 或 Swing。
- 應用程式將從類的
main()方法開始。當main()方法退出或應用程式向 JVM 丟擲異常時,應用程式停止。類根據需要載入到記憶體並編譯,無論是來自檔案系統還是來自 *.jar 檔案,都由 JVM 完成。 - 呼叫以這種方式分發的 Java 程式需要使用命令列。一旦使用者擁有所有類檔案,他需要透過以下命令列啟動應用程式(其中 Main 是包含 main() 方法的類的名稱)。
類執行
java Main |
- Java 'jar' 類庫
- 實用程式類、框架類和/或第三方類通常打包並分發在 Java '*.jar' 檔案中。這些 'jar' 檔案需要放在將使用這些類的 Java 程式的 CLASSPATH 中。
- 如果 jar 檔案是可執行的,則可以從命令列執行它
歸檔執行
java -jar Application.jar |
- 客戶端伺服器應用程式
- 客戶端伺服器應用程式由前端和後端組成,每個部分都在單獨的計算機上執行。其理念是業務邏輯將位於程式的後端部分,所有客戶端都將重用該部分。這裡的挑戰是在前端使用者介面程式碼和後端業務邏輯程式碼之間實現分離。
- 前端和後端之間的通訊可以透過兩種方式實現。
- 有關客戶端-伺服器程式設計的更多資訊(包括示例程式碼),請參閱本書中的客戶端伺服器章節。
- Web 應用程式
- 對於許多客戶端安裝所需的應用程式,客戶端-伺服器模型不起作用。維護和升級數百或數千個客戶端會導致問題。這是不切實際的。解決此問題的方案是為所有應用程式建立一個統一的標準客戶端,即瀏覽器。
- 擁有一個標準客戶端,建立統一的標準後端服務也是有意義的,即應用程式伺服器。
- Web 應用程式是在應用程式伺服器中執行的應用程式,並且可以透過瀏覽器客戶端訪問和使用。
- Web 應用程式主要關注三個領域,它們是
- 維基百科還有一篇關於Web 應用程式的文章。
隨著重點從訪問 GUI 客戶端轉移到瘦客戶端應用程式,在 Java 2 版本中,Sun 推出了 J2EE(Java 2 擴充套件版)。J2EE 添加了
- 元件基礎架構(Servlet、JSP、EJB 容器)
使用 J2EE,可以進行以下 Java 元件執行

- Java Servlet 程式碼
- (圖 2)Java 透過伺服器端程式設計,更具體地說,透過J2EE Servlet 獲得了普及。Servlet 在簡單的 J2EE 框架中執行,以處理客戶端HTTP 請求。它們旨在替換CGI 程式設計,以渲染 Web 頁面動態內容。
- Servlet 執行在一個被稱為 Servlet 容器/Web 容器 的環境中。Servlet 的職責是
- 透過執行業務邏輯計算來處理請求,
- 根據需要連線資料庫,
- 建立 HTML 以透過瀏覽器呈現給使用者
- HTML 輸出同時代表了展現邏輯和業務計算的結果。這代表了一個巨大的問題,並且沒有真正的應用程式僅僅依靠 Servlet 來處理職責中的展現部分。對此有兩個主要的解決方案:
- 使用模板工具(將展現部分儲存在 HTML 檔案中,標記在業務邏輯計算後需要替換的區域)。
- 使用 JSP(參見下一節)
- 維基百科也有一篇關於 Servlet 的文章。

- Java Server Pages (JSP) 程式碼
- (圖 3) JSP 是一個 HTML 檔案,其中嵌入了 Java 程式碼。第一次訪問 JSP 時,JSP 會被轉換為 Java Servlet。這個 Servlet 輸出包含業務邏輯計算結果的 HTML。有一些特殊的 JSP 標籤可以幫助動態地向 HTML 中新增資料。此外,JSP 技術允許建立自定義標籤。
- 正確使用 JSP 技術,業務邏輯計算不應該放在 JSP 嵌入的 Java 部分。JSP 應該用於呈現靜態和動態資料的展現。根據資料的複雜性,100% 的分離並不容易實現。然而,使用自定義標籤可以幫助我們更接近 100%。這也在 MVC 架構(見下文)中提倡。

- EJB 程式碼
- (圖 4) 在 20 世紀 90 年代,隨著客戶端伺服器計算的發展,一個趨勢開始出現,即遠離大型機計算。這導致公司/企業中出現了許多小型獨立的應用程式。很多時候,不同的應用程式使用相同的資料。為了解決這些問題,建立了一種新的理念,“企業計算”。其想法是建立可以在整個企業中重用的元件。企業級 Java Bean (EJB) 正是為了解決這個問題而出現的。
- EJB 是一個執行在 EJB 容器中的應用程式元件。客戶端透過容器訪問 EJB 模組,而不是直接訪問。容器管理 EJB 模組的生命週期,並處理網路/企業計算中出現的所有問題。其中一些問題包括 安全/訪問控制、物件池、事務管理 等。
- EJB 與任何可重用程式碼一樣都存在相同的問題:它們需要足夠通用才能被重用,並且 EJB 的更改或維護可能會影響現有的客戶端。很多時候,EJB 在沒有真正需要時被不必要地使用。EJB 應該被設計為企業中一個獨立的應用程式,履行一項功能。

- 組合 J2EE 元件以建立 MVC 架構
- 這將我們引向 (圖 5) 中所示的三層/三層架構。
- 在現代 Web 應用程式中,隨著大量靜態資料和精美圖形的出現,資料如何呈現給使用者變得非常重要,通常需要圖形藝術家的幫助。
- 為了幫助程式設計師和圖形藝術家協同工作,資料、程式碼以及呈現方式之間的分離變得至關重要。
-
- 檢視(使用者介面邏輯)包含構建展現所需的邏輯。這可以透過 JSP 技術來處理。
- Servlet 充當控制器,包含處理使用者事件並選擇適當響應所需的邏輯。
- 業務邏輯(模型)實際上實現了互動的目標。這可能是對資料庫的查詢或更新。這可以透過 EJB 技術來處理。
- 有關 MVC 的更多資訊,請參閱 MVC。
在 J2EE 之後,Sun 對網路計算的下一步發展有了願景。那就是 Jini。其主要思想是在網路環境中,會有許多獨立的服務和消費者。Jini 將允許這些服務/消費者以健壯的方式動態地相互互動。Jini 的基本特性是:
- 無需使用者干預即可將服務上線或下線。(與 EJB 不同,在 EJB 中,客戶端程式必須知道 EJB 部署的伺服器和埠號,而在 Jini 中,客戶端應該找到、發現網路中的服務。)
- 當服務(服務的消費者)出現和消失時,透過適應實現自我修復。(服務需要定期續約以表明它們仍然可用。)
- JINI 服務的消費者不需要事先了解服務的實現。實現是動態下載並在消費者的 JVM 上執行,無需配置和使用者干預。(例如,終端使用者可能會看到略微不同的使用者介面,具體取決於當時正在使用的服務。使用者介面程式碼的實現將由正在使用的服務提供。)
一個最小的 Jini 網路環境包括:
- 一個或多個服務
- 一個查詢服務,儲存已註冊服務的列表
- 一個或多個消費者
在撰寫本文時(2006 年),Jini 並沒有得到廣泛使用。這可能有兩個原因。一是 Jini 有點複雜,難以理解和設定。另一個原因是微軟退出了 Java,導致業界轉向使用專有解決方案。