导图社区 JAVAEE 平台技术
JAVAEE 平台技术知识点梳理~详细的总结了JAVAEE平台技术,Mybatis和数据库,测试Spring应用等等内容梳理。
编辑于2023-03-14 13:52:41 福建省JAVAEE 平台技术
JAVAEE 平台技术(1-6章)
Spring框架核心
软件模块化
层次性的分化
视图层(View):以面向功能的方式来设计
控制器层(Controller):用于连接视图层和模型层
模型层(Model):以面向对象的方式来设计
数据访问层(DAO):负责获取数据组装成对象的数据访问层
服务层(service):负责业务逻辑
映射层(Mapper):负责数据对象模型向数据库关系模型转换
实体层(Entity):数据的载体
spring技术栈
阻塞式技术栈
Servlet技术栈:一次请求一次性处理完全(不能充分利用CPU,读写阻塞相应)
springMVC:实现服务器端的控制器来处理HTTP的请求和回应
JDBC/JPA:访问数据库
非阻塞式技术栈
响应式技术栈:将请求中的操作进行分类,慢速处理操作如读取io将分列在前置的事件队列中并侦听时候完成慢速操作,若完成了该操作则进行数据处理等高速处理操作(用于io操作频繁的引用,如:微服务的网关)
Webflux:实现服务器(异步高速Netty 服务器)端的控制器层
servlet原理
运行在服务器上的Java程序
####
包含HTTP协议
Sevlet对象创建
定义拦截器(Interceptor):检查http请求
doGet方法使用的示例
Spring容器
创建对象、Spring容器通过配置文件来获取创建对象之间的关联(xml(繁琐)、java代码、注解来写配置信息)、控制创建对象的生命周期
BeanFactory
实例化Bea对象
维护Bean对象之间的关联
销毁Bean对象
ApplicationContext
BeanFactory派生出来的容器,具备BeanFactory所有的特性,并增加了一些高级功能
对象生命周期
Bean级生命周期接口
BeanNameAware
通过配置文件来获取bean对象的名称
BeanFactoryAware
获取BeanFactory对象
ApplicationContextAware
获取BeanApplication对象
InitializingBean
创建时的接口
DisposableBean
销毁时的接口
容器级生命接口
InstantiationAwareBeanPostProcessorAdapter
BeanPostProcessor
控制反转
Maven和SpringBoot
Maven简介
Apache下纯Java开源项目,管理项目的依赖、构建、生成报告和文档等步骤
编译打包程序
管理程序运行时需要的jar包
Maven目录管理
src文件夹:存放所有源代码和静态资源
mian:存放生产代码和生产资源文件
java:存放所有的Java代码
resource:配置文件和静态文件
test:存放测试代码和测试资源文件
target文件夹:存放所有编译出来的代码以及所有要用的资源文件,和打包出来的jar包/war包
POM文件
功能
定义项目的基本信息:描述用户如何构建、打包项目
声明项目依赖的jar包
结构
project:POM文件的主要内容
parent:定义POM文件的继承关系
groupId、artifictId构建项目的唯一标识
version:发布项目的版本号
packaging:打包格式(jar(带servelet)/war(不带servelet))
properties:定义在pom中重复利用的一些值,如:版本号
dependencies:定义jar包
plugins:Maven插件
Reposeteries:定义maven的仓库
Maven生命周期
Clean(清理):删除上一次构建产生的各种各样的文件
pre-clean
clean
post-clean
Default(构建)
项目的编译、测试、打包、部署
validate:验证资源是否可用
initialize:初始化工作
generate-sources:用插件生成一些额外的代码
process-sources:处理源代码,对源代码中的值进行替换等操作
generate-resources:生成资源文件,如配置文件
compile:将源代码编译成.class文件
process-classes:对class文件进行处理
generate-test-sources:生成测试源代码
process-test-sources:对源代码进行处理,如:替换一些值
generate-test-resources:测试用的资源文件
process-test-resources:处理资源文件
test-compile:编译项目的单元测试代码
process-test-classes:对编译测试出来的文件进行处理
test:使用一些测试框架来进行单元测试
prepare-package:打包之前的预备工作
package:打包阶段,根据pom中的定义创建jar包/war包
pre-integration-test:集成测试之前的预处理以及建立相应的环境
integration-test:将jar包部署到服务器上面去,在测试环境中进行测试
post-integration-test:环境的清理工作
verify:对继承测试结果进行检查
install:将打包的项目部署到本地的maven仓库中
deploy:将打包的jar包部署到远端的仓库中
Sitr(站点)
生成一些项目的报告,如:测试报告、api文档
pre-site:生成项目文档
site:生成项目的相关文档
post-site
site-deploy:将项目文档发布到指定的web服务器中
Maven插件
插件:通过与每个生命阶段绑定实现功能
spring-boot-maven-plugin
springboot:run:运行spring的应用程序
springboot:repackage:重打包
springboot:help
springboot:start
springboot: stop
插件与maven的绑定
内置绑定:内部已经与生命周期绑定好了的插件
Clean生命周期
clean->maven-clean-plugin:clean
Default生命周期
install->maven-install-plugin:install
deploy->maven-deploy-plugin:deploy
.......
Site生命周期
site->maven-site-plugin:site
site-deploy->maven-site-plugin:deploy
自定义绑定
IDE和Maven对比
SpringBoot
概念
用于构建一个独立的应用程序
内嵌Tomcat、Jetty/Undertow
采用starter POM简化Maven配置
Actuator:提供产品级的运行监控功能
原理
starter原理:jar包集合及其配置
常用stater
spring-boot-starter:包含自动配置以及YAML支持
spring-boot-starter-web:支持web的相关功能
spring-boot-starter-aop:面向方面编程
spring-boot-starter-data-redis:redis数据库的引用
spring-boot-starter-test:用于编写测试代码
Actuator
概念:用于监控,具有健康检查、审计功能以及一些控制功能
用法
导入spring-boot-starter-actuator
运行项目,在浏览器中输入url查看监控内容
导入spring-boot-admin-starter-client收集actuator信息并在浏览器中显示出来
RESTful与SpringMVC
RESTfulAPI
面向资源设计的网络接口,具备良好的自我解释性
网络应用层风格,用资源的模式来描述访问的接口
操作上依赖于http的协议的五种操作
值采用用json的格式来表述,具有人的可读性
RESTful操作
POST:创建一个新的资源并返回新资源
GET:查询特定资源
PUT:修改资源全部属性并返回修改后的资源
PATCH:修改资源的特定属性并返回修改后的资源
DELETE:删除资源
HTTP状态码
2**:操作成功接受并处理
3**:重定向
4**:客户端错误,请求包含语法错误
400:参数格式错误(缺少或不符合要求)
401:用户需登录访问
403:用户无权访问
409:资源冲突或资源被锁定(由于事务回滚造成的)
5**:服务端错误,服务器处理请求过程中发生了错误
500:服务器通用错误(服务器程序错误)
503:服务当前无法处理请求(服务器忙)
SpringMVC
采用松散的可拔插的组件结构
通过用注解的方式使一个java类变成控制器
SpringMVC运行流程
SpringMVC常用注解
@RestController:标识该控制器的提供RESTful风格的API控制器
@GetMapping-->GET;@POSTMapping-->POST;@PutMapping-->PUT;.....
@RequestMapping:可用于以上五种请求,需要method属性中指定
合法性检查
通过Javax.validation来完成对于输入参数的合法性检查
常用注解(通过javax.validation注解来检查输入的值)
@AssertFalse/@AssertTrue:判断输入的是true还是false
@NotNull/@Null:判断是否为空
@NotBlank:判断是否为空字符串
@Max/@Min:判断整形值大于还是小于某一标准值
@Past/@Future:判断属性值比当前的服务器的日期是早还是晚
@Email:检查是否符合Email格式
创建异常类通过@ExceptionHandle指定要处理的异常,故以此来处理由此类注解产生的MethodArgumentNotValidException异常;@ResponseStatus用于确定返回的http状态码
跨域访问
产生原因:由于前后端分离,前后端部署在不同的服务器中导致的跨域问题
解决
简单请求
非简单请求
网络协议概念
预检请求:检查访问域名、方法、包头是否在允许跨源访问范围内,若在允许范围内则回应,反之不回应
SpringMVC配置
通过WebMvcConfigurer接口addCorsMapping()来配置跨源请求(设定全局的访问接口)
也可以在类或方法前面配置@CrossOrigin来说明该方法/类允许跨域访问(设定局部的访问接口)
Tomcat并发原理
运行模式
BIO(阻塞IO):tomcat7及其以下版本的默认模式,以来于传统的Java.io操作
NIO(非阻塞IO):基于JDK1.4以后提供的异步io的API来实现的网络IO
APR(Apache Portable Runtime):在操作系统中来解决异步io的问题
测试Spring应用
测试方法
白盒测试:测试代码的覆盖面,主要测试代码的结构和处理过程
黑盒测试:测试软件的功能
测试层次
单元测试:测试代码中最小的部分(Model对象:Controller、Service、Dao对象:值对象:VO、BO、POJO对象)
切片测试
横向:service层/controller层分开进行独立的测试,采用Mockito的MockBean来将service层模拟成一个bean
纵向:一个功能从接收前端请求到保存到数据库的逻辑过程
集成测试:将整个系统作为整体进行测试,从Controller层作为入口,来测试接口的功能
JMeter性能测试
概念
基于java的开源的性能测试工具
测试计划(TestPlan)
线程组(ThreadGroup):所有线程计划的起点;可设置线程的数目,线程的时长,循环的次数
采样器(Sampler):用以向被测的系统发送http请求、webService请求、Java请求等
断言(Assertion):判断采样器返回的结果,检查是否符合http需求
监听器(Listener):收集所有的测试结果
执行顺序
配置元件-->采样器-->断言-->监听器
测试RestFulDemo
性能测试类型
基准测试:给系统施加一定的压力,检查系统是否是可行的
负载测试:检查系统的负载瓶颈
压力测试:测试系统的容量,负载有多大
并发测试
Mybatis和数据库
Mybatis
Mybatis:半自动框架对象关系模型持久化框架
用于数据库和实体类之间的关系映射(类->表;对象->记录;属性->字段;关联关系->外部id实现)
开发效率低,性能可调优
Mybatis配置
通过xml文件或注解的方式用标记来编写数据库和实体类之间的映射关系进行配置Mybatis
Mybatis标记
insert
将实体类映射为数据库中新增对象
update
映射为修改操作
delete
映射为删除操作
select
映射为查找的结果集
* #{name}预编译数据写法,防止sql注入攻击
resultMap
映射为复杂查询操作(在两张表中查找信息)
parameterMap
将多个参数传到Mybatis中
sql
重用sql代码
insert
插入sql语句
Mapper接口及XML配置
Spring中的Mybatis
Mapper的xml定义
namespace xml的名字
Mapper接口定义
定义方法的参数和返回值,要和xml文件对应
mapper对象的产生:读取配置信息创建Configuration对象;采用动态代理对象模拟mapper接口
Mybatis配置信息
主要写在yaml文件中,通过mapper-locations 设置xml文件地址;type-aliase-package 扫描mapper中间定义的类型的别名(@Alias(“别名”)
事务的ACID
数据库中的事务:指的是数据库中的一个操作序列,该序列要么全部执行,要么全部不执行,如果有一个失败,则全部失败。失败后进行事务回滚将数据更改为初始数据
spring中的事务:不局限于对数据库操作的,也对数据源的事务进行操作。如果数据源支持的话;在spring中通过@Transaction来标识一个事务bean对象的方法或对象前面
@Transaction
propagation:控制事务传播的方式
REQUIRED:如果当前没有事务则会开启一个新的事物,否则就沿用已有的事务
SUPPORTS:当前这一段代码是支持事务的
MANDATORY:必须要有事务,若没有则抛出异常
REQUIPRES_NEW:新建一个事务
NOT_SUPPORTS:不支持事务,如果有事务也会当没有事务进行处理
NEVER:不能有事务
isolation:标识事务的隔离级别
readOnly:只读事务
rollbackFor、rollbackForClassName、noRollbackFor、noRollbackForClassName:引起回滚的异常
事务特性
原子性Atomicity
一致性Consistency
隔离性Isolation
持久性Durability
事务的隔离级别
用于处理事务并发的问题
脏读
A事务处理完数据之后进行回滚,在回滚之前B事务读取A事务修改的值
原因没有隔离事务
幻读
B事务在A事务读取时,增加一个数据,便会在A事务重新读取时进行加一
不可重复读
A事务读取数据时,B事务对该数据进行修改,A事务读取数据之前和读取数据之后的数据不一样
给数据加入读锁
isolation
DEFAULT:数据库的默认隔离级别
READ_UNCOMMITED:最低级别的隔离,事务之间可以读取事务产生的中间数据
READ_COMMITED:禁止事务之间读取事务的1中间过程中间所修改的数据,但又不可重复读和幻读问题
REPEATABLE_READ:对数据加了一个读锁
SERIALIZABLE:完全串行,解决脏读、幻读、不可重复读的问题,但效率太慢
层次结构及对象定义
controller层:接受前端数据封装数据;封装数据传给前端;处理错误码、异常
vo:接受前端数据,带有合法性检查的功能
Retvo:封装给前端的数据
service层:业务代码
BO:装载业务对象,其中包含PO对象
DAO层:访问数据;封装数据
PO:数据库访问
Mapper层:实现对象模型;关系数据库转换
SpringBoot的Mybatis工程配置
隔离级别的实验
资源:应用系统中的基本概念,通过用一个url来代表一个资源
JSON特性:便于机器解析,易于人的理解,有利于网络传输
VUE/微信小程序
SpringMVC
SpringBean
Redis
Mybatis
POJO
运行模式过程图