天天看點

javaEE和javaweb的差別JavaEEJavaSEJavaEE 與 JavaSE 的差別與聯系JavaEE和JavaWeb的差別JavaEE與Java 的關系

JavaEE

JavaEE 概念

Java EE,Java 平台企業版(Java Platform Enterprise Edition),之前稱為Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名為 Jakarta EE(這個名稱應該還沒有得到群衆認可)。是 Sun 公司為企業級應用推出的标準平台,用來開發B/S架構軟體。JavaEE指的是一套規範,也可以認為是遵循JavaEE規範、使用JavaSE實作的技術和架構。

JavaEE 是 Java 應用最廣泛的部分。

例如:

JavaSE包含socket的内容,JavaEE則是提出JSR902、JSR903規範,按照規範中的要求把socket封裝成Servlet供直接使用;

JavaSE包含annotation和自定義注解API(Pluggable Annotation Processing API)的内容,JavaEE則是提出JSR269規範,所有架構中定義的注解都必須符合該規範,典型的例如lombok中的@Getter/@Setter注解就是符合JSR269規範的,當然你也可以依據JSR269的要求,自己實作一個@Getter/@Setter注解;

這就是JavaEE和JavaSE的差別,目前官網上最新的是JavaEE7的内容:

JavaEE7

網上一般會講JavaEE的13個規範,實際上JavaEE 7 規範不止13個,加粗的是實作了這些規範的架構:

Web層

提供Web互動,資料傳輸等方面的元件

  1. 關注于為用戶端生成各種格式内容的視圖子產品:JSP JSTL EL JSF
  2. 關注于Web實時互動的子產品:WebSocket Java API——SpringBoot架構
  3. 關注于提供Web服務的Java Web Service子產品:JAX-WS JAX-RS——SpringBoot架構
  4. 關注于互動資料規範的子產品:JSON-P JAXB
  5. 關注于Web請求和響應的子產品:Servlet——SpringBoot架構

企業資訊層(EIS)

提供與其他企業中間件或服務互動的元件

  1. 關注于與資料庫互動的子產品:JDBC——Hibernate架構、SpringData Jpa架構
  2. 關注于Java持久化的子產品:JPA——Hibernate架構、SpringData Jpa架構
  3. 關注于Java資訊服務的子產品:JMS——ActiveMq消息中間件
  4. 關注于Mail服務的子產品:JavaMail API
  5. 關注于與遺留系統互動的子產品:JCA
  6. 關注于執行批量任務的子產品:Batch——Spring Batch3.0批處理架構

通用(Common)

提供公用元件

  1. 關注于上下文與依賴注入的子產品:CDI——Spring架構
  2. 關注于整合安全的子產品:JACC JASP JAAS
  3. 關注于JavaEE平台規範注解的子產品:JavaEE通用注解(JavaEE common Annotation)
  4. 關注于資料校驗的子產品:Bean驗證API(Bean Validation)——Hibernate Validator驗證架構
  5. 關注于JavaEE管理的子產品:JavaEE管理API(JavaEE Management API)
  6. 關注于提供查找元件,資源或服務的間接層子產品:JNDI

業務層(Core)

提供簡化業務邏輯編寫的元件

  1. 關注于用于開發可移植,可重用,可伸縮的企業應用程式設計模型:EJB
  2. 關注于用于開發簡化的,輕量級的,容器管理的,基于POJO的程式設計模型:托管Beans(Managed Beans)
  3. 關注于提供面向切面程式設計的子產品:攔截器API(Interceptor)
  4. 關注于提供事務管理的子產品:JTA
  5. 關注于優化并發程式設計的子產品:JavaEE并發工具包(Concurrency Utilities for Java EE)

關于JavaSE規範和JavaEE規範,參考:

JavaSE規範,Java規範,JSR規範全面整理

隻要知道了JavaEE包含哪些規範,就能知道自己大概要掌握哪些技術了。

PS:用Bean Validation架構校驗真的很省事啦~

JavaSE

$java_home/jre/lib/rt.jar裡的全部内容,比如java目錄下的lang包、util包、io/nio包等14個包的内容,一般是一些基礎類庫,例如包裝類、collection、concurrent并發包、函數式接口、反射、注解等,簡單粗暴的講,JavaSE就是jdk包含的内容;

javaEE和javaweb的差別JavaEEJavaSEJavaEE 與 JavaSE 的差別與聯系JavaEE和JavaWeb的差別JavaEE與Java 的關系

JavaEE 與 JavaSE 的差別與聯系

JavaEE 是在 JavaSE 的基礎上建構的,是對 JavaSE 的擴充,增加了一些更加便捷的應用架構。除了 EE 和 SE,還有為移動端而生的 JavaME,但目前應用不算廣泛。三者的關系可以用下圖概括:

javaEE和javaweb的差別JavaEEJavaSEJavaEE 與 JavaSE 的差別與聯系JavaEE和JavaWeb的差別JavaEE與Java 的關系

JavaEE和JavaWeb的差別

JavaEE的技術包括兩個部分,開發B/S架構(網站)和C/S架構(用戶端)的内容,也就相當于QQ網頁版和QQ桌面用戶端的差別,B/S架構的那一套也就是我們所說的JavaWeb,C/S架構也就是桌面應用(用戶端),是以說JavaEE包含了JavaWEB,這也就是JavaEE和JavaWeb的差別。

同樣的,對于JavaWeb伺服器和JavaEE伺服器的差別,tomcat是JavaWeb伺服器,tomEE是JavaEE伺服器,tomEE包含tomcat。

使用Java開發的桌面用戶端比較少,最有名的要屬Eclipse了,Eclipse就是用java開發的桌面應用。至于為什麼java很少用來開發桌面應用,這又是一個具有争議話題了。

JavaEE與Java 的關系

Java剛開始的時候,因為各種應用和生态不成熟,很多東西需要有人牽頭制定強制規範引導Java的發展,于是Java EE曾經引領了企業級應用的開發。

但随着時代的進步,以及越來越多的公司群組織參與到Java世界,出現了各種各樣的Java EE元件的代替者,比如Hibernate、Spring就是其中兩個典型。相反,Java官方制定的各種Java EE規範反而不太受歡迎,他們制定了JSF規範,但實際企業開發喜歡用Struts 2、Spring MVC;他們制定了EJB規範,但實際企業開發往往還是喜歡用Spring;他們制定了JPA規範,但實際企業開發往往還是喜歡直接用Hibernate、MyBatis。

現代企業級應用常用的各種架構和工具,比如Struts 2、Spring、Hibernate、jBPM、Activiti、Lucene、Hadoop、Drools、CXF等這些大家耳熟能詳的元件,全部都不是來自Oracle官方,但是卻在企業應用中開發經常用到的。

現在企業裡面,真正常用的JavaEE規範有什麼?Servlet、JSP、JMS、JNDI。這些技術都隻是充當了一個程式的入口而已。

Oracle之是以可能考慮放棄Java EE,正展現了Oracle對喪失Java控制權的無奈。企業的本質是逐利,Oracle每年為制定Java EE規範投入不少人力、财力,但制定的規範最終并沒有獲得市場的青睐,是以Oracle可能放棄這種吃虧不讨好的事情。

但Java不同,2016年6月,Java在商業語言排行榜上的市場佔有率将近21%,龐大到恐怖的市場佔有率,背後隐藏着巨大各種專利使用費和盈利商機,任何一個理智的公司都不會放棄這個會下金蛋的母雞。

由此可見,oracle上提供的java EE是官方指定的javaEE規範,裡面都是符合官方指定的javaEE元件,我們用SSM,SSH開發背景時使用到的隻有Servlet、JSP、JMS等少量的java EE規範,沒有必要使用orcale提供的java EE版本,直接使用jdk就可以(當然還需要maven等管理第三方的jar包來實作功能)