首先說下, 這篇文章我以爲很強大,很給力,概念性的東西蠻多的,因此須要慢慢的去讀,能夠加深你對j2ee的理解和應用。值得你們閱讀。java
J2EE學習者愈來愈多,J2EE自己技術不斷在發展,涌現出各類概念,本文章試圖從一種容易理解的角度對這些概念向初學者進行解釋,以便掌握學習J2EE學習方向。
首先咱們須要知道Java和J2EE是兩個不一樣概念,Java不僅是指一種語言,已經表明與微軟不一樣的另一個巨大陣營,因此Java有時是指一種軟件系統的流派,固然目前主要是.NET和Java兩大主流體系。
J2EE能夠說指Java在數據庫信息系統上實現,數據庫信息系統從早期的dBase、到Delphi/VB等C/S結構,發展到B/S(Browser瀏覽器/Server服務器)結構,而J2EE主要是指B/S結構的實現。
J2EE又是一種框架和標準,框架相似API、庫的概念,可是要超出它們。若是須要詳細瞭解框架,可先從設計模式開始學習。
J2EE是一個虛的大的概念,J2EE標準主要有三種子技術標準:WEB技術、EJB(部署分佈式程序)技術和JMS(Meseage 異步通訊),談到J2EE應該說最終要落實到這三個子概念上。
這三種技術的每一個技術在應用時都涉及兩個部分:容器部分和應用部分,Web容器也是指Jsp/Servlet容器,你若是要開發一個Web應用,不管是編譯或運行,都必需要有Jsp/Servlet庫或API支持(除了JDK/J2SE之外)。
Web技術中除了Jsp/Servlet技術外,還須要JavaBeans或Java Class實現一些功能或者包裝攜帶數據,因此Web技術最初裸體簡稱爲Jsp/Servlet+JavaBeans系統。
談到JavaBeans技術,就涉及到組件構件技術(component),這是Java的核心基礎部分,不少軟件設計概念(設計模式)都是經過JavaBeans實現的。
JavaBeans不屬於J2EE概念範疇中,若是一個JavaBeans對象被Web技術(也就是Jsp/Servlet)調用,那麼JavaBeans就運行在J2EE的Web容器中;若是它被EJB調用,它就運行在EJB容器中。
EJB(企業JavaBeans)是普通JavaBeans的一種提高和規範,由於企業信息系統開發中須要一個可伸縮的性能和事務、安全機制,這樣能保證企業系統平滑發展,而不是發展到一種規模從新更換一套軟件系統。
至此,JavaBeans組件發展到EJB後,並非說之前的那種JavaBeans形式就消失了,這就天然造成了兩種JavaBeans技 術:EJB和POJO,POJO徹底不一樣於EJB概念,指的是普通JavaBeans,並且這個JavaBeans不依附某種框架,或者乾脆能夠說:這個 JavaBeans是你爲這個應用程序單獨開發建立的。
J2EE應用系統開發工具備不少:如JBuilder、Eclipse等,這些IDE首先是Java開發工具,也就是說,它們首要基本功能是可 以開發出JavaBeans或Java class,可是若是要開發出J2EE系統,就要落實到要麼是Web技術或EJB技術,那麼就有可能要一些專門模塊功能(如eclipse須要 lomboz插件),最重要的是,由於J2EE系統區分爲容器和應用兩個部分,因此,在任何開發工具中開發J2EE都須要指定J2EE容器。
J2EE容器分爲WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接 使用Tomcat實現的。因此你開發的Web應用程序能夠在上面兩種容器運行,而你開發的Web+EJB應用則只能夠在JBoss服務器上運行,商業產品 Websphere/Weblogic等和JBoss屬於同一種性質。
J2EE容器也稱爲J2EE服務器,大部分時它們概念是一致的。
若是你的J2EE應用系統的數據庫鏈接是經過JNDI得到,也就是說是從容器中得到,那麼你的J2EE應用系統基本與數據庫無關,若是你在你的 J2EE應用系統耦合了數據庫JDBC驅動的配置,那麼你的J2EE應用系統就有數據庫概念色彩,做爲一個成熟須要推廣的J2EE應用系統,不推薦和具體 數據庫耦合(就是說用jdbc),固然這其中如何保證J2EE應用系統運行性能又是體現你的設計水平了。
衡量J2EE應用系統設計開發水平高低的標準就是:解耦性;你的應用系統各個功能是否可以完全脫離?是否不相互依賴,也只有這樣,才能體現可維護性、可拓展性的軟件設計目標。
爲了達到這個目的,誕生各類框架概念,J2EE框架標準將一個系統劃分爲WEB和EJB(技術上分區)主要部分,固然咱們有時不是以這個具體技術區分,而是從設計上抽象爲表現層、服務層和持久層,這三個層次從一個高度將J2EE分離開來,實現解耦目的。
所以,咱們實際編程中,也要將本身的功能向這三個層次上靠,作到大方向清楚,涇渭分明,可是沒有技術上約束限制要作到這點是很不容易的,所以咱們仍是必須藉助J2EE具體技術來實現,這時,你可使用EJB規範實現服務層和持久層,Web技術實現表現層;
EJB爲何能將服務層從Jsp/Servlet手中分離出來,由於它對JavaBeans編碼有強制的約束,如今有一種對JavaBeans 弱約束,使用Ioc模式實現的(固然EJB 3.0也採起這種方式),在Ioc模式誕生前,通常都是經過工廠模式來對JavaBeans約束,造成一個服務層,這也是是Jive這樣開源論壇設計原理 之一。
由此,將服務層從表現層中分離出來目前有兩種可選架構選擇:管理普通JavaBeans(POJO)框架(如Spring、JdonFramework)以及管理EJB的EJB框架,由於EJB不僅是框架,仍是標準,而標準能夠擴展發展,因此,這兩種區別未來是可能模糊,被歸入同一個標準了。 可是,我的認爲:標準制定是爲某個目的服務的,總要犧牲一些換取另一些,因此,這兩種架構會長時間並存。
這兩種架構分歧也曾經誕生一個新名詞:徹底POJO的系統也稱爲輕量級系統(lightweight),其實這個名詞自己就沒有一個嚴格定義, 更可能是一個吸引人的招牌,輕量是指容易學習容易使用嗎?按照這個定義,其實輕量Spring等系統並不容易學習;並且EJB 3.0(依然叫EJB)之後的系統是否可稱爲輕量級了呢?
前面談了服務層框架,使用服務層框架能夠將JavaBeans從Jsp/Servlet中分離出來,而使用表現層框架則能夠將Jsp中剩餘的 JavaBeans徹底分離,這部分JavaBeans主要負責顯示相關,通常是經過標籤庫(taglib)實現,不一樣框架有不一樣本身的標籤 庫,Struts是應用比較普遍的一種表現層框架。
這樣,表現層和服務層的分離是經過兩種框架達到目的,剩餘的就是持久層框架了,經過持久層的框架將數據庫存儲從服務層中分離出來是其目的,持久 層框架有兩種方向:直接本身編寫JDBC等SQL語句(如iBatis);使用O/R Mapping技術實現的Hibernate和JDO技術;固然還有EJB中的實體Bean技術。
持久層框架目前呈現百花齊放,各有優缺點的現狀,因此正如表現層框架同樣,目前沒有一個框架被指定爲標準框架,固然,表現層框架如今又出來了一個JSF,它表明的頁面組件概念是一個新的發展方向,可是複雜的實現讓人有些忘而卻步。
在全部這些J2EE技術中,雖然SUN公司發揮了很大的做用,不過整體來講:網絡上有這樣一個評價:SUN的理論天下無敵;SUN的產品用起來 撞牆;對於初學者,特別是那些試圖經過或已經經過SUN認證的初學者,趕快擺脫SUN的陰影,當即開溜,使用開源領域的產品來實現本身的應用系統。
最後,你的J2EE應用系統若是採起上面提到的表現層、服務層和持久層的框架實現,基本你也能夠在無需深入掌握設計模式的狀況下開發出一個高質量的應用系統了。
還要注意的是: 開發出一個高質量的J2EE系統還須要正確的業務需求理解,那麼域建模提供了一種比較切實可行的正確理解業務需求的方法,相關詳細知識可從UML角度結合理解。
固然,若是你想設計本身的行業框架,那麼第一步從設計模式開始吧,由於設計模式提供你一個實現JavaBeans或類之間解耦參考實現方法,當 你學會了系統基本單元JavaBean或類之間解耦時,那麼系統模塊之間的解耦你就可能掌握,進而你就能夠實現行業框架的提煉了,這又是另一個發展方向 了。
以上理念能夠總結爲一句話:J2EE開發三件寶: Domain Model(域建模)、patterns(模式)和framework(框架)。數據庫