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