簡單解析J2EE架構:工具包的集合
作為一個職業程序員,很多時候反而不會太在意工具背后的理論,因為完成任務往往是最重要的。由于中國網絡的的興起,大量業內外人士開始接觸 Java 語言,一時間網上鋪天蓋地都是一些關于基本概念的問題。人的好奇心往往是激起來的而不是自發的,就如網上沒幾個人會問操作系統或者汽車制造業的概念一樣,其實更多時候人們只是好奇,而不是想進一步做什么。
但,好奇總是好的,尤其對于知識來說。
我最近難得閑暇,也翻閱了不少資料,正好借這個機會談談 J2EE 的架構。
正文:
如同其它版本一樣,J2EE 本身也是一些工具包的集合,只不過是更多針對企業應用。我們知道 Java 是伴隨著網絡興起的,從互聯網時代到來的那一刻開始,客戶端/服務器的結構就已經深入人心,但在早先的時候即便是用 J2EE,開發服務器也相當繁瑣。這就是為什么要有程序服務器(Application Server),同時就引出了容器(Container)的概念。要想理解什么是容器,最簡單的辦法就是從需求來推導。
正如操作系統會為程序開發人員準備 api 一樣,程序服務器要怎么同 Java 開發人員的程序交互,開發好的程序又怎么能在服務器端運行?有人可能說有 J2EE 就行了,其實不然。J2EE 并沒有提供一個現實可用的服務器程序,只是提出了 J2EE 程序的規范,你用 J2EE 開發出來的程序實際上是沒有服務器功能的(比如建立 Socket 響應 HTTP 請求,以 SMTP 發送郵件之類),但不用擔心,一切必要的功能已經由服務器程序完成了。你需要在意的只是如何與服務器交互,而交互的任務就落到了容器的頭上。
容器將服務器功能對應 J2EE 規范封裝為 J2EE 程序可以調用的接口,同時通過 XML 配置文件處理類與類之間的關系。(比如何時生成實例,何時銷毀)這時你編寫程序只要考慮容器暴露出來的接口,不用擔心服務器具體的調用方式了。而這也為之后的 ejb 容器及 Spring 這個大熱門的容器提供了空間,容器脫離了服務器而存在,你只需對容器編程,不用擔心用的是何種服務器。
至于 ejb 就好說了,其實它的前身就是 ibm 為自己公司開發的容器,里面包裝了比 J2EE 規范更多的接口,方便企業程序的開發應用。而 sun 之后接納了 ejb 作為 J2EE 的一部分,使得程序開發更加便捷。Spring 的出現則是因為人們對 ejb 依舊不滿,希望有更加易用的容器出現。Spring 作為一個輕量級容器一方面簡化了開發的難度,另一方面由于模塊化的優點方便人們將 Spring 與其它框架組合(比如 Struts 和 Hibernate 等),使開發 J2EE 程序變得越發簡單。當然這并不是說 JSP + Java bean 的方法不是最簡單的,而是就一些中大型應用而言,Spring 找到了一個微妙的平衡。
這就是J2EE架構:一些工具包的集合,程序服務器,接口,容器……而Spring則是一個易用的容器。
【編輯推薦】