springBoot2 精髓 从构建小系统到架构分布式大系统学习笔记
Java EE简介
JavaEE
JavaEE 介绍
1、 为什么需要JavaEE
我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展。当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担。
为了程序的易维护性和可扩展性,这就需要我们使用JavaEE技术来进行项目开发
2、 什么是JavaEE
JavaEE是一个开发分布式企业级应用的规范和标准。
Java语言的平台有3个版本:适用于小型设备和智能卡的JavaME(Java Platform Micro Edition,Java微型版)、适用于桌面系统的JavaSE(Java Platform Micro Edition,Java标准版)、适用于企业应用的JavaEE(Java Platform Enterprise Edition,Java企业版)。
3、 JavaEE包括的技术
JavaEE应用程序是由组件构成的。J2EE组件是具有独立功能的单元,他们通过相关的类和文件组装成JavaEE应用程序,并与其他组件交互。
JavaEE包括的技术有:Web Service、Struts、Hibernate、Spring、JSP、Servlet、JSF、EJB、JavaBean、JDBC、JNDI、XML、JavaSE。
JavaEE的组件和规范简介
JavaEE的组件
参考博客:https://blog.csdn.net/lianjiangwei/article/details/50848531
首先,我们得先了解一下这里所说的组件是什么鬼?
百度百科给出的解释是:组件(Component)是对数据和方法的简单封装。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。
从上面的描述来看,实际上就是面向对象的思想,或者就是在描述一个类,因为对象或者类就是由属性和方法构成的。而我们的JavaEE应用程序就是由组件构成的,JavaEE组件是具有独立功能的单元,它们通过相关的类和文件进行组装,成为应用程序,并且与其他组件交互。例如:控制器组件、EAO组件,表现层组件等等。下面我们就根据JavaEE的分层模型来说说各层组件的详细情况。
表现层组件:
主要负责收集用户输入数据,或者向客户显示系统状态。最常用的表现层技术是JSP,但JSP并不是唯一的表现层技术。表现层还可以由Velocity、FreeMaker和Tapestry等技术完成,或者使用普通的应用程序充当表现层组件,甚至可以是小型智能设备,比如我们手机、IPad等等。
控制器组件:
对于JavaEE的MVC框架而言,框架提供了一个前端核心控制器,而核心控制器负责拦截用户请求,并将请求转发给用户实现的控制器组件。而这些用户实现的控制器则负责处理调用业务逻辑方法,处理用户请求。
业务逻辑组件:
这些组件是系统的核心组件,实现系统的业务逻辑。通常,一个业务逻辑方法对应一次用户操作。一个业务逻辑方法应该是一个整体的,因此我们要求对业务逻辑方法增加事务性。业务逻辑方法仅仅负责实现业务逻辑,不应该进行数据库访问。因此,业务逻辑组件中不应该出现原始的Hibernate。JDBC等API。
为什么要将业务逻辑实现与持久层的技术分离呢?一个很重要的原因是:当系统需要在不同的持久层技术之间切换时,系统的业务逻辑组件无须做任何改变。
DAO组件:
Data Access Object,也被称为数据访问对象。这个类型的对象比较缺乏变化,每个DAO组件都提供Domain Object对象基本的创建、查询、更新和删除等操作,这些操作对应于数据表的CRUD等原子操作。当然,如果采用不同的持久层访问技术,DAO组件的实现会完全不同。为了业务逻辑组件的实现与DAO组件的实现分离,我们为每个DAO组件都提供接口,业务逻辑组件面向DAO接口编程,从而提供更好的解耦。
领域对象组件:
领域对象(Domain Object)抽象了系统的对象模型。通常而言,这些领域对象的状态都必须保存在数据库里面。因此,每个领域对象通常对应一个或多个数据表,领域对象通常需要提供对数据记录的访问方式。
小结一下;
最后放上一张图,帮助大家更好理解JavaEE应用架构和各种技术之间的关系。

其实很多人都会有这样的疑问:我可以使用JSP完成整个系统,为何还有这么费劲的将系统分这么层?每层使用不同的技术框架?有必要么?
对于个人学习、娱乐性的个人站点而言,你怎么做都无所谓,但是对于大型的信息化系统来说,你就要好好考虑考虑了,维护性、扩展性、复用性等等都是问题。
JavaEE规范
参考博客:https://blog.csdn.net/zh15732621679/article/details/53966404
J2EE的13个技术规范:JDBC,JNDI,EJB,RMI,JSP,Servlets,XML,JMS,Java IDL,JTS,JTA,JavaMail,JAF。
1.JDBC(Java DataBase Connectivity)
java数据连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。有了JDBC就不用因为不同的数据库而要写个不同的应用程序,开发人员只需要使用JDBC API写一个程序就够了。
2.JNDI(Java Naming and Directory Interface)
Java命名和目录接口,提供了一种统一的方式可以在网络上查找和访问服务,通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录,同时返回数据库连接建立所必需的信息。
在DataSource中事先建立多个数据库连接,保存在数据库连接池中,当程序访问数据库时,只用从连接池中取空闲状态的数据库连接即可,访问结束,销毁资源,数据库链接重新回到连接池。
3.EJB(Enterprise JavaBean)
EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。包括四种对象类型:无状态会话bean(提供独立服务),有状态会话bean(提供会话交互),实体bean(持久性数据在内存中的体现,服务器崩溃后可恢复),消息驱动bean。
4.RMI(Remote Method Invoke)
远程方法调用,能够让在某个java虚拟机上的对象调用本地对象一样的调用另一个java虚拟机中高的对象上的方法。
5.JSP(Java Server Pages)
java服务器页面,是一个动态内容模板,实现了Html语法中的java扩展。
6.Servlet
Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。
7.XML(Extensible Markup Language)
是一种可扩展的标记语言,被用来在不同的商务过程中共享数据,其目标是平台独立性,记得在学习XML的时候,可以自己写标签,只要有结束标签就可以识别,还是相当强大的。
8.JMS(Java Message Service)
是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。消息通信可以是点对点的,也可以是发布订阅型的。
9.Java IDL
Java IDL支持的是一个瞬间的CORBA对象,即在对象服务器处理过程中有效。实际上,Java IDL的ORB是一个类库而已,并不是一个完整的平台软件,但它对Java IDL应用系统和其他CORBA应用系统之间提供了很好的底层通信支持,实现了OMG定义的ORB基本功能。
10.JTS(object transaction monitor)
组件事务监视器,TPM 是一个程序,它代表应用程序协调分布式事务的执行。TPM 与数据库出现的时间长短差不多;在 60 年代后期,IBM 首先开发了 CICS,至今人们仍在使用。经典的(或者说 程序化)TPM 管理被程序化定义为针对事务性资源(比如数据库)的操作序列的事务。随着分布式对象协议,如 CORBA、DCOM 和 RMI 的出现,人们希望看到事务更面向对象的前景。将事务性语义告知面向对象的组件要求对 TPM 模型进行扩展 ― 在这个模型中事务是按照事务性对象的调用方法定义的。JTS 只是一个组件事务监视器(有时也称为 对象事务监视器(object transaction monitor)),或称为 CTM。
11.JTA(Java Transaction API)
JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。
12.JavaMail
提供给开发者处理电子邮件相关的编程接口。
13.JAF(JavaBeans Activation Framework)
JAF是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口。
spring
spring简介
Spring是为了解决应用复杂性而产生的框架,它吸取了Java EE容器管理的优点,提供了一个IOC容器来管理Bean,并通过AOP方式来增强Bean的功能,不同的是它并没有像Java EE那样详细规定容器提供的是何种服务和容器里运行的具体组件类型。Spring只提供了两种机制,控制反转(IOC)和面向切面(AOP),来提供任意的服务和增强Bean的任意特性,使得Spring本身容易掌握,又可以通过Bean管理来无限扩展功能。
springBoot热部署方式
spring Boot提供了 spring-boot-devtools,它能在修改类或者配置文件的时候自动重新加载spring boot应用,需要打开pom文件,添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
重启服务即可。
Spring Boot基础
检查Java环境和安装Java
检查和配置Maven
Spring核心技术
MVC框架
集成MVC框架
使用Controller
URL 隐射到方法
方法参数
验证框架
WebMvcConfigurer
视图技术
Beetle模板引擎
使用变量
表达式
控制语句
函数调用
格式化函数
直接调用Java
标签函数
HTML标签
安全输出
高级功能
脚本引擎
JSON技术
MVC分离开发
数据库访问
配置数据源
Spring JDBC Template
BeetlSQL
SQLManager内置CRUD
使用SQLId
BeetlSQL的其他功能
Spring Data JPA
集成Spring Data JPA
Repository
SpringBoot配置
配置SpringBoot
日志配置
读取应用配置
SpringBoot自动装配
SpringBoot应用
Testing单元测试
JUnit介绍
SpringBoot单元测试
Mockito
面向数据库应用的单元测试
REST
##