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交互,数据传输等方面的组件
- 关注于为客户端生成各种格式内容的视图模块:JSP JSTL EL JSF
- 关注于Web实时交互的模块:WebSocket Java API——SpringBoot框架
- 关注于提供Web服务的Java Web Service模块:JAX-WS JAX-RS——SpringBoot框架
- 关注于交互数据规范的模块:JSON-P JAXB
- 关注于Web请求和响应的模块:Servlet——SpringBoot框架
企业信息层(EIS)
提供与其他企业中间件或服务交互的组件
- 关注于与数据库交互的模块:JDBC——Hibernate框架、SpringData Jpa框架
- 关注于Java持久化的模块:JPA——Hibernate框架、SpringData Jpa框架
- 关注于Java信息服务的模块:JMS——ActiveMq消息中间件
- 关注于Mail服务的模块:JavaMail API
- 关注于与遗留系统交互的模块:JCA
- 关注于执行批量任务的模块:Batch——Spring Batch3.0批处理框架
通用(Common)
提供公用组件
- 关注于上下文与依赖注入的模块:CDI——Spring框架
- 关注于整合安全的模块:JACC JASP JAAS
- 关注于JavaEE平台规范注解的模块:JavaEE通用注解(JavaEE common Annotation)
- 关注于数据校验的模块:Bean验证API(Bean Validation)——Hibernate Validator验证框架
- 关注于JavaEE管理的模块:JavaEE管理API(JavaEE Management API)
- 关注于提供查找组件,资源或服务的间接层模块:JNDI
业务层(Core)
提供简化业务逻辑编写的组件
- 关注于用于开发可移植,可重用,可伸缩的企业应用编程模型:EJB
- 关注于用于开发简化的,轻量级的,容器管理的,基于POJO的编程模型:托管Beans(Managed Beans)
- 关注于提供面向切面编程的模块:拦截器API(Interceptor)
- 关注于提供事务管理的模块:JTA
- 关注于优化并发编程的模块: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 与 JavaSE 的区别与联系
JavaEE 是在 JavaSE 的基础上构建的,是对 JavaSE 的扩展,增加了一些更加便捷的应用框架。除了 EE 和 SE,还有为移动端而生的 JavaME,但目前应用不算广泛。三者的关系可以用下图概括:
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包来实现功能)