整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML5 崛起之時,Java 桌面時代就已經終結了

          004 年 Google Maps 的面世標志著 Java 桌面時代的終結,也改變了桌面環境下“跨平臺”的基本定義。


          本文作者以個人視角對 Java 桌面發展歷程做了回顧,內容來自他在上世紀九十年代后期擔任 Java 開發者時的所見所感,主要講述曾經的“殺手級”桌面語言 Java 是為何從 21 世紀開始頹勢盡顯、步入衰落的。值得一提的是,作者如今在做一款開發者友好型 Java 桌面部署工具(jDeploy),其實他還是希望 Java 可以重拾風采,再度變得對桌面開發具有吸引力。


          本文是該回顧系列文章中的第二篇,在上期文章中,作者回顧了 Java 制霸桌面的鴻圖如何在 1999 至 2005 的短短幾年間煙消云散。當初的 Java 可謂志得意滿、憑 Applet 小程序技驚四座,下決心要在互聯網時代下重新定義“桌面”。互聯網的未來在于“跨平臺”,而 Java 的血管中涌動的正是“跨平臺”的血液,優勢在握!可遺憾的是,事后來看,此跨平臺似乎并非彼跨平臺。接下來,讓我們繼續跟著作者的腳步去看看,具體在 2004 至 2007 年間,Java 桌面又經歷了什么。

          桌面王朝的最后時光

          2002 年左右,我在客服中心為客戶提供計算機與打印機技術支持。我和小伙伴們擠在小小的隔間里,面對著一款桌面程序。通過這款軟件,我們可以快速查詢客戶和產品信息,并把通話中的重要信息記錄進去。


          在典型的客服來電中,我們會詢問客戶的產品序列號,再把結果輸入系統。如果他們之前就打過電話,系統就會輸出窗口,里面包含產品的完整歷史記錄和之前的求助細節。在參考其他同事留下的事由記錄后,我還能操作界面中的選項卡和功能按鈕,例如幫客戶更換新機。


          我不記得這款軟件叫什么名字了,可能是為公司或者客服中心專門定制的吧。印象里這應該是 PeopleSoft(仁科公司,2005 年已被甲骨文收購)的產品,但我也不太確定。總之,這款桌面軟件運行在 Windows 2000 系統上,肯定不是 Web 應用程序。它其實挺復雜,里面包含不少菜單和表單;不過一旦上手,整個使用體驗相當棒——速度快、反應靈敏,幾乎沒有任何延遲。以輸入電話號碼查詢客戶記錄為例,我們只需要在“電話”字段里輸入號碼,其余空白表格就會立刻被客戶信息填充完整。


          據我所知,這款程序肯定不是用 Swing 編寫的。但如今全球各地無數公司都在使用由 Swing 編寫的企業級桌面軟件,它們在使用體驗上跟我當初接觸的這款程序非常相似。換句話說,Swing 已經滿足了我們在 2001、2002 年那會對于桌面業務軟件的全部期望和想象。


          在工作半年之后,上邊來了新指示,要求我們用 Web 應用程序替換掉之前的桌面軟件。據說新系統會讓我們的工作更輕松,但在第一節培訓課剛剛過去十分鐘后,我們就意識到這根本就是胡說八道:新系統簡直爛透了!


          我不太記得當時使用的是 IE 5.5 還是 IE 6 了,總之就是前 AJAX 時代的 Web 環境。現在在產品字段中輸入序號后,系統會彈出一個窗口,上面寫著“正在加載……請勿關閉此窗口”。幾秒后,窗口自行消失,客戶詳細信息出現在表單當中。反正每當需要從服務器獲取內容時,這個倒霉窗口就會跳出來。領導還提醒我們別隨便在瀏覽器里點“刷新”,說是這樣會破壞系統狀態。于是每每出現問題,我就只能先登出、再重新登錄。


          我不太理解公司為什么要用這款“傻了吧唧”的 Web 應用程序替代之前的桌面軟件。可能是出于成本考慮吧,畢竟跟桌面軟件相比,Web 應用程序的開發和維護成本都更低。或者是軟件供應商強行施壓,比如“Web 才是未來,每個人都必須接受!”但,真有這么強勢的乙方嗎?


          無論如何,這里透露出一個重要的信息:Web 應用程序還沒等發展完善,就已經開始蠶食桌面軟件的生存空間。唯一的問題就是 Web 應用需要多久才能追平桌面軟件的使用體驗。而事實證明,用不了多久。

          恐怖谷效應

          再回到 Java 這邊。熱情的支持者們正不斷擴大 Java 帝國的桌面版圖,對 WORA(一次編寫、隨處運行)的熱情也引導他們最終邁向跨平臺小程序與“本機”應用程序之間的秘密山谷。那時候的 Java IDE 主要面向三大構建目標:


          1. 小程序
          2. Java Web 開發
          3. 可執行 Jar 文件是的,沒有直接開發本機應用程序的選項。雖然有第三方工具可以把 Jar 文件轉換為本機應用程序,但這類工具相當復雜而且操作流程極為繁瑣。只有對自己最“狠”的人才能堅持用得下去。而 Java 之所以有勇氣忽視這一點,靠的就是對未來的判斷——本機桌面應用程序終于被淘汰。其實這個預言是正確的,只是在時間上有所偏差。


          從 2022 年的角度回顧,Java 身上其實有很多顯而易見的問題。應用程序可以作為 Web 部署、也可以按本機部署,但這兩種形式都沒有一丁點“原生”感。Web 部署的小程序運行在自己的“沙箱”內并被集成到網頁當中,整個運行過程又慢又遲鈍。

          HTML5 的崛起

          雖然 Java 總想在 Web 和桌面之間建起一道橋梁,但它自身卻被 Web 所裹挾。到 2002 年,很多企業開始把原本的桌面軟件功能遷移到 Web 端。這些 Web 應用程序的構建、維護和部署成本確實比桌面軟件低得多,代價就是在用戶體驗上做出妥協。


          大約也是在這個時候,Java 開始推崇“富互聯網應用”的概念,希望把好 Web 應用跟差 Web 應用區分開來。但到 2004 年 Google Maps 正式亮相時,Java 的小把戲徹底宣告破產。Google Maps 以令人震驚的效果為富 Web 應用程序樹立了標桿,而人家用的是 HTML5。


          我最近又看了一次 Bill Atkinson 第一次向蘋果愛好者們展示 MacPaint 的舊視頻。在他第一次通過鼠標用畫筆工具繪出圖案時,現場一片“哇哦”和掌聲。這就叫開創性。我第一次看到 Google Maps 也是類似的感覺,地圖可以無縫縮放、萬向平移,壓根看不出來任何拼接的痕跡。這里使用的全新技術被稱為 AJAX(異步 JavaScript 與 XML),這也是人們第一次能夠在 Web 應用程序中向服務器后臺無縫發出請求。現在這一切當然被視為理所當然,可 2004 年那會,開發者需要絞盡腦汁才能把那些讓人想吐的框架或者彈窗隱藏起來,確保不用刷新整個頁面就能從服務器處加載新數據。


          身為 Web 開發者,我當然對其中的無窮可能性心生向往。但從桌面開發的角度看,這場歷史性的變革似乎沒有給桌面、特別是 Java 帶來任何影響。


          在 HTML5 之前,“跨平臺”的意思是“跨 Windows、Mac 和 Linux”,所以跨的范圍還是在桌面范疇之內。當時我并沒意識到,但現在來看 HTML5 的亮相代表著新平臺時代的降臨——它將成為客戶端應用程序的客觀標準;更重要的是,Java 支持不了這個平臺。突然之間,WORA 理念就出現空白了——Swing 應用程序適用于一切平臺,除了最重要的那個:網絡瀏覽器。

          Java 開發者紛紛“外逃”

          那 Java 桌面開發者們都跑哪去了?方向主要有三:

          1. 服務器
          2. 瀏覽器(HTML5)
          3. 桌面應用如果大家對自己的基本定位首先是“Java 開發者”、其次是“客戶端開發者”,那最終應該會選擇 Java 在當下仍然占據主動的平臺——服務器。如果你對面向用戶開發(客戶端)更感興趣,而且主要看中 Java 的跨平臺價值主張,那接下來的目標很可能是 HTML5 (Javascript/HTML/CSS)開發。如果你是鐵桿“保皇黨”(比如說我),那就繼續堅守 Java 桌面開發,同時滿腹狐疑地看著自己這個圈子越來越小。

          GWT:讓 Java 走進瀏覽器

          2000 年初,JavaScript 開發工具尚處于起步階段。大多數 Web 開發者只能使用文本編輯器來編寫.js 文件。簡單的驗證腳本和交互設計倒是沒問題,但這種粗糙的方法肯定不能擴展并支持大型企業應用程序項目。另外,當時的 JavaScript 語言還不具備開發者在重構等重要操作時所需要的功能,例如靜態類型。


          相比之下,Java 已經擁有一套全面的開發工具,能夠輕松擴展至任何規模的項目。到 2004 年,領先且成熟的 Java IDE 已經成為開發環境中的標桿,其中的靜態類型更是大大簡化了大型項目的維護難度。到這時,唯一的遺憾就是 Java 應用程序無法在網絡瀏覽器中運行(只有小程序可以)。


          為了解決這個難題,Google 打造出 GWT(Google Web Toolkit)。這是一套 Java 到 JavaScript 的編譯器加運行時庫,允許開發者借助 Java 那一整套領先的開發工具編寫應用程序,再把成果部署成 JavaScript 應用的形式在瀏覽器內原生運行。這套運行時庫包含諸多核心 Java API(例如 java.lang、java.util 等)的實現,確保業務邏輯能夠在 GWT 應用程序與服務器應用程序間順暢共享。


          在用戶界面方面,GWT 也提供自己的功能部件,其實質就是以 Java 的形式將各部件與瀏覽器中的本機 HTML 部件相綁定。雖然我們還是沒法直接使用 Swing 代碼、大部分第三方庫也不在支持之列,但我們至少可以用到自己最熟悉的 Java 開發環境和核心 API。


          所以這不能算是讓 Java 真正走進了瀏覽器——標準 JavaSE 庫仍然大部分不受支持,線程等核心功能也無法起效。但至少對多數用例來說,這已經夠了。


          Google 用 GWT 開發出很多流行一時的 HTML5 應用程序,其中最著名的就是 Gmail,這個項目還催生出一個規模不大、但卻相當活躍的開源社區。雖然影響力已經今非昔比,但這個社區直到現在也仍然存在。與此同時,JavaScript 工具的逐步改進也在擠占 GWT 的生存空間,過去十年來誕生的一系列更為現代的解決方案也允許我們在瀏覽器中更“無腦”地使用 Java。

          服務器上的淘金熱

          HTML5 的出現顛覆了 Java 制霸桌面的野心,但這里也有好消息。由于不必分神于桌面端,Java 在服務器端迎來了全面發展。Java 做好了戰斗準備、努力滿足開發者對后端服務的種種新需求——畢竟沒有后端,再好的 Web 應用也出不來。


          Java 在服務器端的受歡迎程度在接下來幾年中持續增長,也吸引到整個生態系統的高度關注。第三方庫不斷涌現,而 2005 年 Maven 的誕生也讓第三方庫的使用不再復雜繁瑣。無需額外下載、不必尋找依賴項,直接把片段粘貼到 pom 文件中,它就能自動下載一切相應依賴項。


          Java 的開發工具也在不斷改進,這在很大程度上要歸功于 Java 在服務器端的優勢地位。這些改進也對桌面開發者產生了積極影響,讓我們用上了跟服務器端相同的 IDE、編譯器、虛擬機和庫。然而,代表 Java 世界“最后的堅持”的這幫桌面開發者眼界還是沒能打開,仍在圍著 UI 庫的改進和部署打轉。


          遇到問題時,我的習慣是上 Google 搜一搜,看看有沒有其他人遇到或者已經解決過相同的問題。但在 Swing 開發上,我發現最新的搜索結果也基本是 2005 年左右的內容了,之后基本再無新增。在找不到答案時,我偶爾會寫一篇問題分析博文。而在兩年后再次遇到類似問題時,我在 Google 上找到的就是自己兩年前那篇博文……說真的,現在還有喘氣的 Swing 開發者嗎?感覺真的說不好。

          重新定義“桌面應用”

          從各個方面來看,Web 的興起讓“桌面應用”的概念清晰了起來。Java 最初的跨平臺客戶端開發愿景并沒有把瘦客戶端(主要與遠程服務器交互)跟本機完整桌面應用程序區分開來。這不僅提高了理解難度,更讓安全模型的設計有些無所適從。Java 理解中的“平臺”就是計算機本身,所以會使用笨拙的沙箱來限制可能引發安全威脅的 API 訪問,例如訪問文件系統。這是 Java 一切安全漏洞的根源,也是導致 Java 被逐出瀏覽器世界的原因。


          這種基于“沙箱”的開發體驗相當糟糕,因為我們很容易意外“越界”并觸發安全異常。最終結果是,幾乎所有客戶端都會請求對系統進行“可信”訪問,這樣也就完全繞過了沙箱的限制。


          相比之下,HTML5 在 Web 和桌面之間設立了明確的邊界。Web 應用程序默認無權訪問客戶端計算機,而瀏覽器才是那個“平臺”,這就讓客戶端應用程序的安全保障變得更輕松、更易行。


          經過此番變革,“桌面”的范疇變得更小,以往很多被視為“桌面應用程序”的軟件現在被劃入“客戶端應用程序”類別。具體來講,如果應用程序只負責在用戶與服務器交互時提供 UI,那它就屬于客戶端應用程序。“桌面”這個概念現在指的就是那些以某種方式與本機設備相集成的應用程序,包括訪問文件系統(開發工具、文件轉換工具等)、調用瀏覽器中不存在的某些平臺本機 API、以及執行算力密集型任務的軟件。


          這倒不是說“客戶端”應用程序跟“桌面”應用程序間就毫無交集——當然有,這兩者都涉及 GUI,而且不少現代桌面應用程序也都需要接入服務器。所以無論是桌面還是客戶端應用程序,都能享受到 GUI 工具包改進、媒體(音頻/視頻)及網絡等技術層面的改進成果。

          Java 桌面的新征程

          2004 年,我曾在 Mac 和 Windows 上都開發出一些商用級別的 Java 桌面應用程序。HTML5 對這類應用程序基本沒有任何直接影響。結合自身需求,Swing 還是完全夠用,我用來構建本機捆綁包的各種桌面部署工具也都能正常起效。


          但很遺憾,科技行業就是個不進則退的世界。在接下來的幾年中,Web 平臺一路突飛猛進、而 Swing 卻始終停滯不前。到 2007 年,Swing 已經到了不變革、就消亡的危難關頭。它需要響應 HTML5 這波歷史性潮流,而最終答案就是 JavaFX。這是一種新奇的 Java UI 工具包,能夠把 Java 帶入 GPU 加速、場景圖、3D 圖形、Web 視圖的現代新世界,同時支持 MP3 和 MP4 等現代音視頻編解碼器。


          在下一篇文章中,我們將回顧 JavaFX 的火爆人氣、深遠影響,以及 2011 年 Mac 應用商店出現前 Java 領域的其他發展趨勢。別小瞧 Mac 應用商店,它的出現堪稱對 Java for Mac 桌面開發生態的“斬首行動”。


          原文鏈接:

          https://jdeploy.substack.com/p/the-decline-and-fall-of-java-on-the-970

          了解更多軟件開發與相關領域知識,點擊訪問 InfoQ 官網:https://www.infoq.cn/,獲取更多精彩內容!

          明:本欄目所使用的素材都是凱哥學堂VIP學員所寫,學員有權匿名,對文章有最終解釋權;凱哥學堂旨在促進VIP學員互相學習的基礎上公開筆記。

          Html5-網頁編程

          跑馬燈:< marquee >標簽

          direction屬性:移動方向

          loop屬性:循環次數

          behavior屬性:出發點

          scrollamount屬性:移動速度

          < div >標記

          針對網頁進行一個分區

          樣式其實就是標簽中的style的屬性內容,頁面的美化布局都是由這些屬性來控制的,在標記中找到的屬性是有限的。如果都是在style屬性中去寫樣式內容,那么每個都得去寫,勢必就會有許多的代碼的重復,所以這個時候就引入了css樣式表,去統一的、綜合的管理這些style屬性里的內容。

          樣式表就是標記屬性配置。

          內部樣式表:head標記之間寫一個 style 標記即可

          外部樣式表:head標記之間寫一個 link 標記引入外部樣式文件

          樣式選擇器:

          如何給樣式表起名字,能概括那些標記。

          標記樣式:直接寫標記名稱可以設置整個頁面此標記的樣式。只要網頁中出現這個標記,那么就全部映對這個樣式。不太推薦

          標記名稱:

          ID名稱設置

          注意:標記名稱樣式大于id名稱樣式,id名稱樣式會覆蓋標記名稱樣式

          . class屬性樣式,這種樣式需要你在標記中寫 class屬性才可以引入

          id 和 class 的區別:

          id 是標記的起個名字,這個名字是全局唯一

          class 引入樣式表 可以重復引入 也可以多引入

          著互聯網的發展,IT行業也成為如今的就業熱門行業,但是很多想要轉行做開發的人,在選擇轉行之前就有一個疑問,那就是:學HTML5好,還是Java好?

          1、發展前景

          HTML5發展前景:

          HTML5并不是一項新的技術,HTML是HTML5的前身,在2014年10月29日HTML5的標準規范制定完成。HTML5工程師是協調前端設計師、后端程序員實現網站頁面或程序的界面美化、交互體驗的一個職位。目前,HTML5無論是從實用性、市場需求還是薪資待遇來看,都是廣受從業人員青睞的發展方向。

          Java發展前景:

          現在一般軟件公司,大多需要java方面的工程師,一般的嵌入式公司也是同樣需要Java方面的人才,目前,我國仍然還存在很大的Java人才缺口,缺口可達42.5萬,并且以每年20%左右的速度增長。

          2、就業方向

          HTML5就業方向

          Web前端開發工程師、用戶界面測試、HTML5開發工程師、Web APP開發工程師

          Java就業方向

          JSP網站開發、Java編程、Java游戲開發、Java桌面程序設計,以及其他與Java語言編程相關的工作,也可進入電信、銀行、醫療、郵箱、物流、保險專業軟件開發公司等從事軟件設計和開發工作。

          HTML5屬于前端行業,而Java屬于后端,從事HTML5開發的程序員和從事Java開發的程序員所需要的掌握的技術以及工作職責都是不同的。

          從上文我們看出,HTML5和Java的都屬于發展前景好,職業發展也不錯的,至于學哪個好?其實是沒有必要去對比的,因為它們分別屬于前端和后端,沒有什么可比性,關鍵在于想要進入IT行業的你,對哪個更感興趣。

          不要太過于糾結這個問題,從事IT方向的開發,不管是前端,還是后端,都不要僅局限于某一種編程語言,盡量在把一門語言吃透的情況下,去接觸其它類型的語言,因為多個語言,一般在邏輯與思想上,可以是互通的。而且在自己已經吃透一門語言的情況下,每多了解和掌握一門其他的技術都是可以提高自己的行業競爭力的。

          既然選擇了從事IT行業,就要抱有不斷學習的心態,IT行業的發展是飛速的,想要一直從事這個行業,就需要不斷提升自己,讓自己一直進步。IT行業不會排斥任何想要進入這個行業的人,但是它會淘汰掉那些停止學習和進步的人。


          主站蜘蛛池模板: 国产精品香蕉在线一区| 国产成人久久一区二区不卡三区| 国产精品亚洲专区一区| 无码少妇一区二区三区 | 精品无人乱码一区二区三区| 人成精品视频三区二区一区| 色欲AV蜜臀一区二区三区| 国产精品盗摄一区二区在线| 红杏亚洲影院一区二区三区| 亚洲av成人一区二区三区 | 久久精品道一区二区三区| 亚洲av无码一区二区三区天堂| 免费在线观看一区| 国产一区二区三区播放心情潘金莲| 一夲道无码人妻精品一区二区 | 性色av一区二区三区夜夜嗨 | 午夜一区二区免费视频| 97久久精品无码一区二区天美| 农村人乱弄一区二区 | 一区国严二区亚洲三区| 婷婷亚洲综合一区二区| 亚洲欧美日韩国产精品一区| 在线观看亚洲一区二区| 日本一区午夜艳熟免费| 中文字幕亚洲一区| 岛国精品一区免费视频在线观看| 国产精品综合一区二区| 人妻精品无码一区二区三区| 亚洲熟女乱色一区二区三区 | 亚洲高清一区二区三区| 99久久精品午夜一区二区| 在线精品视频一区二区| 狠狠综合久久av一区二区| 国产aⅴ一区二区三区| 精品久久国产一区二区三区香蕉 | 国产乱人伦精品一区二区在线观看| bt7086福利一区国产| 国产乱人伦精品一区二区在线观看| 国产精品区一区二区三| 国产一区二区在线视频播放| 久久国产精品免费一区|