Java Applet 的興衰史:從 1995 的網路革命先驅到 2025 的歷史文物

Oracle Applet page

隨著 Java 26 中 JEP 504 移除 Java Applet官方規格)的提出,開發團隊正式宣告了 Java Applet API 的終結。這項曾經引領網路互動革命的技術,將在經歷近 30 年的生命週期後,將正式從 Java 平台中移除。這個決定並非突如其來,而是一連串技術演進和市場變化的必然結果。

作為 Java 語言最早的應用場景之一,Java Applet 曾經是網頁開發中不可或缺的技術。它讓靜態的網頁擁有了動態互動的能力,為早期的網路世界帶來了嶄新的可能性。然而,隨著網路瀏覽器生態的變遷和替代技術的興起,它逐漸失去了其重要地位,最終走向了歷史舞台的終點。

Java Applet 的興盛時代

1995 年,當時 Sun Microsystems 昇陽電腦推出了 Java 語言,而 Applet 便是其核心應用之一。在當時的網路環境中,HTML 僅能提供靜態內容,使用者體驗相當有限。許多公司和使用者都在尋求是否能夠有更加豐富的體驗出現。

Java Applet 的出現徹底改變了這個局面,它允許開發者將 Java 程式內嵌到網頁之中,讓瀏覽器能夠直接執行這些程式。從此以後,網頁從單向的靜態內容轉為雙向的動態互動。它提供了互動式的圖形與應用,成為早期網路體驗的革命性技術,並且廣受企業與開發者青睞,也開啟了 Java 在前端的黃金時代。這一創新也為 Java 贏得了「Write Once, Run Anywhere」的美譽,同時也讓網頁應用進入了一個全新的時代。

此後的 1996 年至 2000 年間,它迅速成為網頁開發的主流技術。大量的商業網站和教育機構紛紛採用 Applet 來實現各種互動功能,從簡單的動畫效果到複雜的線上遊戲,再到功能完備的金融計算工具,此時的 Applet 幾乎可算是無所不能。

它的成功不僅在於強大的功能,還在於獨特的安全機制。Java 的安全管理器(Security Manager)提供了沙箱環境,確保這些從網路下載的程式碼不會危害使用者的系統。它讓網站可以放心地部署 Applet,也讓使用者可以安心地與之互動,為 Applet 技術的快速普及奠定了基礎。在 2000 年代初期,幾乎所有主流瀏覽器都內建或外掛支援 Applet,這使得 Applet 成為跨平台網頁應用開發的首選技術之一。

Java Applet Clock source code

老喬的第一個 Java 程式

當時,學習 Java 幾乎等同於學習 Applet 開發,許多初學者的第一個 Java 程式就是一個簡單的 Applet。此時期也是 Java 技術最為輝煌的階段之一,Applet 的普及直接推動了 Java 語言的廣泛採用。

記得那時有位友人在敦煌書局任職,需要舉行一個線上活動,讓小朋友們可以用各種瀏覽器玩簡單的拼圖遊戲,完成後可以領取獎賞。她來找老喬外包,而我當時只學過 C / C++,無法滿足該活動的需求,所以只能尋求其他語言的解決方案。

於是,老喬跑去書局買了一本 Java 教學書籍,藉著過去培養的程式設計基礎,快速翻完 Java 基礎概念後就直衝 Applet 撰寫,最終在沒日沒夜的六天後完成測試並成功交付。因此,Java Applet 可以說是老喬花了大半輩子投身 Java 開發的原點,也是第一個靠 Java 謀生的工具(第二個是 JSP……)。

Applet 簡介

Applet 讓 Java 程式能夠在網頁瀏覽器的內部運行,我們必須使用 <applet><objects> 標籤將它嵌入在 HTML 檔案中。為了安全性,Applet 會在沙箱中執行,以限制對本地系統資源的存取:

  • 基本概念:每個 Applet 都是 java.applet.Applet 類別的子類別
  • 無法獨立運行:Applet 無法像一般的 Java 程式一樣自行運行,它們需要網頁瀏覽器或一個特殊工具 applet viewer(隨 Java 附帶)
  • 沒有 main() 方法:Applet 不以 main() 方法啟動
  • 顯示輸出:Applet 不使用 System.out.println() 來顯示輸出。相反地,它們使用來自 AWT 的圖形方法繪製,例如 drawString()

當 Applet 啟動時,會依順序呼叫下列方法:

  1. init()
  2. start()
  3. paint()

當 Applet 終止時,會依順序呼叫下列方法:

  1. stop()
  2. destroy()

下面是一個 Applet 的 Hello World 程式(HelloWorldApplet.java):

import java.applet.Applet;
import java.awt.Graphics;

public class HelloWorldApplet extends Applet {
  public void init() { }  // 初始方法,可省略不寫

  public void start() { }  // 啟動或重啟時的操作,可省略不寫

  // 描繪螢幕
  public void paint(Graphics g) {
    // 在螢幕中 x=20, y=20 的地方印出訊息
    g.drawString("Hello, world!", 20,20);
  }

  public void stop() { }  // 停止時的操作,可省略不寫

  public void destroy() { } // 終結方法,可省略不寫
}

嵌入 Applet 的網頁檔原始碼(HelloWorldApplet.html):

<html>
  <head>
    <title>Hello World Java Applet Demo</title>
  </head>
  <body>
    <h1>Hello World Java Applet Demo</h1>
    <applet code="HelloWorldApplet.class" witdh="200" height="60" />
  </body>
</html>

appletviewer 執行:

// 執行 HTML 檔案
> appletviewer HelloWorldApplet.html
// 或是直接跑原始檔
> appletviewer HelloWorldApplet

結果如下:

Hello World Java Applet

技術衰退的原因

然而,隨著網路技術的快速發展,Applet 逐漸顯露出其局限性。

性能不佳

首先是性能問題,Java 虛擬機的啟動時間過長,對於追求快速載入的網頁和沒耐心的使用者來說是一項明顯的缺點。其次,使用者必須安裝 Java 外掛並保持更新,進一步提高了技術門檻並降低使用意願。

更重要的是,新興的替代技術開始崛起:Flash 提供了更簡單的開發方式和更好的多媒體支援,而 JavaScript 則隨著瀏覽器性能的提升和標準的統一,逐漸成為前端開發的主流語言。特別是 AJAX 技術的出現與 HTML5 新興網頁標準的崛起,讓開發者能夠創建無需外掛的互動式網頁應用,這使得 Applet 的優勢不再那麼明顯。

安全性隱憂

安全問題也是 Applet 衰退的重要原因。儘管 Java 平台有著嚴格的安全架構,但隨著 Applet 的普及,針對其安全漏洞的攻擊也越來越多。每次安全漏洞的披露和修補都會讓使用者和開發者對 Applet 技術產生疑慮。特別是 2010 年代初期,幾次嚴重的安全事件嚴重損害了 Java 外掛的聲譽。

這也導致主要瀏覽器廠商開始重新評估對 Java 外掛的支援,並最終促使他們逐步移除或禁用這一功能。最終,當各個主要瀏覽器停止繼續支援 NPAPI 時,實際上也宣告了 Applet 時代的終結。

歷史痕跡

時至今日,Applet 在現代環境中已經完全無法使用。事實上,它在 JDK 9 中就已被棄用,執行工具 appletviewer 也在 JDK 11 中被移除,而其關鍵的安全支柱 Security Manager 在 Java 24 中永久禁用。最終,Java 25 中的 JEP 504 將完全移除 Applet API

這標誌著一個時代的終結,也象徵 Java 平台為擁抱未來而進行的必要精簡。

如今,Applet 已經實質性地退出了網頁開發的舞台,正式成為過往歷史。

未來展望

雖然 Applet 技術即將告別 Java 平台,但其留下的技術遺產和經驗教訓仍然值得我們關注和學習。Java 平台並未因 Applet 的衰落而停滯不前,反而通過其他方向的發展而保持了活力。例如,JavaFX 提供了更現代的桌面和網頁應用開發方案,而 Spring BootJakarta EE 等框架則主導了企業級應用開發。

對於仍在使用 Applet 相關功能的系統,開發者需要考慮遷移到更現代的解決方案,例如基於 HTML5、CSS3 和 JavaScript 的網頁應用,或者使用 WebAssembly 技術以實現高性能的瀏覽器端應用。Java Applet 的興衰歷程也提醒著我們:在技術選擇上,不僅要關注當前的流行趨勢,更要評估技術的長期可持續性和生態系統的健康度,這對於開發者的職業發展和產品項目的長期成功都至關重要。

本篇文章的內容為老喬原創、二創或翻譯而來。雖已善盡校對、順稿與查核義務,但人非聖賢,多少仍會有疏漏之處難以避免。如果大家有任何問題、建議或指教,都歡迎在底下留言與老喬討論!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

4 × four =

目錄
返回頂端