很多初学者开始接触Java EE的时候,都会略有些迷茫,搞不太懂Java EE与Java之间的关系,也不太清楚各个框架都是干嘛的,名词也多,内容也复杂,不知道从哪个地方开始入手。因此,我们这篇文章就为给大详细解读一下Java EE到底是什么,包括哪些方面,应该怎样学习。
一、Java EE到底是什么?
Java EE实际上是Java语言和API的集合。官方说法叫企业级开发,实际上最多的就是做Web应用开发,这里面的Web应用和单独一个网站还是有很大区别的,例如单独开发一个静态页面,很多工具很快就可以完成了。而Web应用,更多的是指在网络上,以看起来像网站形式提供服务的一个复杂应用。例如说Google,网页上看着非常简单,就一个框,实际上,后面有大量的数据库,有大量的推荐算法、查询算法,有广告推荐服务,有排名服务等等,可能这些服务,在网页上最终显示出来的就一句话,但是背后的业务程序却非常复杂。
像淘宝、京东这些购物网站的后台,都是Java写的。背后要处理的东西非常多。比如说下一个订单,就要考虑库存状态、订单的存储和备份、后台的订单处理、状态变更、出库入库、支付系统、结算系统、对账系统,等等。
而这么复杂的一个系统,Java EE把它分为三层,分别是表示层、中间层、数据层。C#中的三层分别是表示层,业务逻辑层、数据访问层,只是不一样的说法,但表达的是同一个意思。如下图所示:
所以对于一个简单的系统,比如说图书管理系统来说,按上图从左到右,就分成五个部分。
1、浏览器:
负责输入要查询的图书,以及把查询的图书展示在浏览器里供人查看。2、视图展示层:
把浏览器里输入的内容包装一下,发给业务处理层。比如说浏览器里输入的是“红楼梦”,它输入给业务处理层的内容可能是{“bookname”:“红楼梦”,“type”:“Query”},告诉业务处理层,这人要查询一本叫红楼梦的书。同时业务处理层查完了,查到一本红楼梦,作者曹雪芹,朝代清朝,页数1563页,出版社清华大学出版社,返回给它之后,它再给包装一下,什么名字大写,图片放在右边,作者放下下面之类。然后给浏览器一显示,用户就看到了。3、业务逻辑层:
处理一下业务逻辑,比如说判断一下,前端传来是,是要查询,还是要删除这本书,或者是要查询相似的书,等等。要查询这本书,他就去查一下,看这本书库里有没有,给持久层一个查询指令。要删除这本书,他就先看一下,发请求的这个人有没有权限,这本书库里有没有,删除这本书这个事要不要记录在日志里等等,确定要删除了,就给持久层发一个删除这本书的指令,发现这个人不能删除这本书,就返回给视图展示层说警告,你的权限不足,删不了。4、持久层:
用来操作数据库的,把四面八方来的数据库增删改查指令都收集到它这里,一起处理,至于他是开一个数据库连接还是一百个连接查询,那就是他自己的事了。5、数据库:
那就老老实实执行,持久层给他什么指令他就干什么。所以可以说,Java EE,就是实现上面这样的系统,需要的一系列技术的集合。
二、Java EE与Java语言之间的关系
Java EE是以Java语言为基础的,可以认为Java语言是汉字,而Java EE则是不同类型的文章。会写汉字,并不代表会写论文、公文。而会写论文也不代表会写公文。
三、Java EE包括哪些技术
通常来讲,Java EE包括13项核心技术。
1、JDBC(Java DataBase Connectivity):
用来连数据库的。2、JNDI(Java Naming and Directory Interfaces) :
给当前服务器管理的所有资源一个统一的标识,换句话说通过这服务能找到服务器管理的任何资源并使用。比如说数据库、网页、文件、连接池等。3、EJB(Enterprise JavaBean):
实际给企业干活的组件,企业自己写完注册在服务器上,服务器给他一个统一的标识,就JNDI管那个,然后应用服务就可以调用了。在这里面,Java EE是提供了部署和使用这些组件的平台和标准。按这个标准写的组件就可以用了。4、RMI (Remote Method Invoke):
远程方法调用,它提供了一种方法,可以远程调用另一个Java虚拟机上的对象中的方法。5、JSP(Java Server Pages):
生成Html给浏览器展示用的。JSP页面由HTML代码和嵌入其中的Java代码组成。服务器在页面端所请求以后,对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。6、Java servlet:
一种小型Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而Servlet全部由Java写成并生成HTML。7、XML(Extensible Markup Language):
可扩展标记语言。大家都见过。8、JMS(Java Message Service) :
Java消息服务,消息中间件规范。JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS用于和面对面对消息的中间件相互通信的应用程序接口(API)。既支持点对点的域,又支持发布/订阅(publish/subscribe)类型的域。常用的消息中间件如ActiveMQ都支持完整的JMS标准。9、Java IDL (Interface Description Language) /CORBA (Common Object Broke Architecture) Java:
接口定义语言/公用对象请求代理程序体系结构。IDL是用来描述软件组件接口的一种计算机语言。IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流。10、JTS (Java Transaction Service) :
是一个组件事务监视器。规定了事务管理器的实现方式。JTS事务管理器为应用服务器,资源管理器,独立的应用以及通信资源管理器提供了事务服务。
11、JTA(Java Transaction API):
和JTA一起为J2EE平台提供了分布式事务服务(distributed transaction)。就是在一堆业务和数据源里,保证了用户操作不会操作到一半出问题后半新半旧的情况,要么全操作完,要么操作失败回到原始状态。12、JavaMail:
顾名思义,存取邮件服务器的API,支持邮件发送服务器SMTP,接收服务器POP3、IMap等。但是其API不怎么好用,底层很强大。所以Spring提供了mail包,封闭了javax.mail,比原生的好用很多。13、JAF (JavaBean Activation Framework):
是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口。JAF的主要作用在于让java应用程序知道如何对一个数据源进行查看、编辑和打印等操作。就是那个大家经常见到的activation.jar。(此处已添加书籍卡片,请到今日头条客户端查看)
四、各类框架与Java EE的关系
提到Java EE,就不得不提到各种轻量级框架,Java EE相关的框架又多又复杂,很多人搞不清楚都是干嘛的。但是其实很简单,Java EE提供的原生功能,很多都不怎么好用,所以程序员们,在基于原生功能基础上,做了很多封装,就是把原生的不怎么好用的功能包起来,用更人性的方式让你使用,然后它再费劲巴拉的去调用原生的框架或者拐个弯实现要用的功能。
1、表现层框架:
表现层框架是用来替代JSP和Servlet的,主要有Struts1、Struts2和Spring MVC。说白了就是JSP和Servlet不太用户友好,用这两个框架帮忙给弄得用户友好些。目前Spring MVC已经成为了主流框架,Struts已经基本没什么人用了,而随着前后端分离的快速流行,Spring MVC提供接口,VUE/React等提供展现的开发模式已经越来越流行了。2、持久层框架:
用来代替原生JDBC,主要有Hibernate、MyBatis/Plus、Spring Data JPA等。他们能让操作数据库,数据库表与实体类的映射,数据库查询结果与前端的展现融合变得非常简单。而不是像JDBC返回一堆数据自己再处理。3、全栈式框架:
在三层结构的各个部分进行优化。主流即为Spring,以IOC(Inverse Of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程)为内核,提供了表现层MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合众多著名的开源第三方框架和类库,逐渐成为使用最多的JavaEE企业应用开源框架。换句话说,Java EE提供的三层功能,该框架及其容纳进来的各种类库都能给实现了,所以人们现在基本上都只用它。而Spring Boot是在Spring框架基础上,进行了进一步封装,变得更加好用了。总结起来,这些框架在Java EE三层结构中的代替关系如下图所示。五、小结
综上所述,Java EE的整个技术栈,包括很多种内容,其中最为核心的,就是完全一个企业级应用所需要的展现、业务处理、和数据存储三层功能。而学习Java EE最基础的,是在了解其技术源流的基础上,学习一个能实现企业业务功能的最小技术集。
这个最小集在多年以前以SSH(Struts、Spring、Hibernate)较为流行,后来升级为Struts2,到后来Struts2渐渐被SpringMVC替换掉,变成了Spring + SpringMVC + Hibernate/ibatis架构。
之后Hibernate配置维护需要的人力成本大而慢慢被ibatis代替,后来MyBatis出现了,从iBatis到MyBatis,MyBatis提供了更为强大的功能,同时并没有损失其易用性,就变成为了Spring+SpringMVC+Mybatis,这是很多公司比较流行的框架。
目前,随着SpringBoot的流行,开始向SpringBoot+Mybatis/plus架构转变,而Spring Data Jpa,又在持久层逐渐占领Mybatis/plus的市场。同时随着微服务的流行,基于SpringBoot的SpringCloud微服务框架开始成为前沿框架。
总之,对于一名软件从业人员来说,要掌握一套完整的开发技术栈,然后不断地尝试新的前沿技术,从而使自己不被时代所淘汰。