web后端开发现在基本上都是基于标准的三层架构进行开发的,在三层架构当中,Controller控制器层负责接收请求响应数据,Service业务层负责具体的业务逻辑处理,而Dao数据访问层也叫持久层,就是用来处理数据访问操作的,来完成数据库当中数据的增删改查操作。
在三层架构当中,前端发起请求首先会到达Controller(不进行逻辑处理),然后Controller会直接调用Service 进行逻辑处理, Service再调用Dao完成数据访问操作。
如果在执行具体的业务处理之前,需要去做一些通用的业务处理,比如:要进行统一的登录校验,进行统一的字符编码等这些操作时,可以借助于Javaweb当中三大组件之一的过滤器Filter或者是Spring当中提供的拦截器Interceptor来实现。
而为了实现三层架构层与层之间的解耦,学习了Spring框架当中的第一大核心:IOC控制反转与DI依赖注入。
所谓控制反转,指的是将对象创建的控制权由应用程序自身交给外部容器,这个容器就是常说的IOC容器或Spring容器。
而DI依赖注入指的是容器为程序提供运行时所需要的资源。
除了IOC与DI学到了AOP面向切面编程,还有Spring中的事务管理、全局异常处理器,以及传递会话技术Cookie、Session以及新的会话跟踪解决方案JWT令牌,阿里云OSS对象存储服务,以及通过Mybatis持久层架构操作数据库等技术。
在学习这些web后端开发技术的时候,都是基于主流的SpringBoot进行整合使用的。而SpringBoot又是用来简化开发,提高开发效率的。像过滤器、拦截器、IOC、DI、AOP、事务管理等这些技术到底是哪个框架提供的核心功能?
Filter过滤器、Cookie、 Session这些都是传统的JavaWeb提供的技术。
JWT令牌、阿里云OSS对象存储服务,是现在企业项目中常见的一些解决方案。
IOC控制反转、DI依赖注入、AOP面向切面编程、事务管理、全局异常处理、拦截器等,这些技术都是 Spring Framework框架当中提供的核心功能。
Mybatis就是一个持久层的框架,是用来操作数据库的。
在Spring框架的生态中,对web程序开发提供了很好的支持,如:全局异常处理器、拦截器这些都是Spring框架中web开发模块所提供的功能,而Spring框架的web开发模块,我们也称为:SpringMVC
SpringMVC不是一个单独的框架,它是Spring框架的一部分,是Spring框架中的web开发模块,是用来简化原始的Servlet程序开发的。
外界俗称的SSM,就是由:SpringMVC、Spring Framework、Mybatis三块组成。
基于传统的SSM框架进行整合开发项目会比较繁琐,而且效率也比较低,所以在现在的企业项目开发当中,基本上都是**直接基于SpringBoot整合SSM进行项目开发
**的。
将一个大的项目拆分为若干个模块,比如拆分为商品模块、搜索模块、购物车模块、订单模块等,方便项目的管理维护、扩展,同时也方便模块间的相互调用,资源共享。
注意事项
- 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.30version>
dependency>
<dependency>
<groupId>com.bowengroupId>
<artifactId>tlias-pojoartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
<dependencies>
<dependency>
<groupId>io.jsonwebtokengroupId>
<artifactId>jjwtartifactId>
<version>0.9.1version>
dependency>
<dependency>
<groupId>com.aliyun.ossgroupId>
<artifactId>aliyun-sdk-ossartifactId>
<version>3.15.1version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<version>2.7.16version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.30version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.7.16version>
dependency>
dependencies>
<dependency>
<groupId>com.bowengroupId>
<artifactId>tlias-utilsartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
jar:普通模块打包,springboot项目基本都是jar包(内嵌Tomcat运行)
war:普通web程序打包,需要部署在外部的Tomcat服务器中运行
pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.bowengroupId>
<artifactId>tlias-parentartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>pompackaging>
<parent>
<artifactId>spring-boot-starter-parentartifactId>
<groupId>org.springframework.bootgroupId>
<version>2.7.16version>
<relativePath/>
parent>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
project>
com.bowen
<parent>
<groupId>com.bowengroupId>
<artifactId>tlias-parentartifactId>
<version>1.0-SNAPSHOTversion>
<relativePath>../tlias-parent/pom.xmlrelativePath>
parent>
lombok
的依赖引入拷贝到tlias-parent中的pom.xml文件中,同时删除tlias-pojo、tlias-utils、tlias-web-management模块的pom.xml文件中的lombok依赖,刷新pom<dependencies>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.30version>
dependency>
dependencies>
注意事项
- 在子工程中,配置了继承关系之后,坐标中的
groupId
是可以是可以省略的,因为会自动继承父工程的relativePath
指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程)
注意事项
- 若父子工程都配置了同一个依赖的不同版本,以子工程的为准
来统一管理依赖版本注意事项
- 子工程引入依赖时,无需指定
版本号,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
与
的区别是什么?
是直接依赖,在父工程配置了依赖,子工程会直接继承下来
是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)
设置当前聚合工程所包含的子模块名称注意事项
- 聚合工程所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关
<modules>
<module>../tlias-pojomodule>
<module>../tlias-utilsmodule>
<module>../tlias-web-managementmodule>
modules>
packeage
打包项目pom.xml
文件打包方式均为pom,可以将两种关系制作到同一个pom文件中注意事项
- 私服在企业项目开发中,一个项目/公司,只需要一台即可(无需自己搭建,会使用即可)。
项目版本
- RELEASE(发行版本):功能区域稳定、当前更新停止,可用于发行的版本,存储在私服中的RELEASE仓库中。
- SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服中的SNAPSHOT仓库中。
私服仓库说明:
- RELEASE:存储自己开发的RELEASE发布版本的资源。
- SNAPSHOT:存储自己开发的SNAPSHOT发布版本的资源。
- Central:存储的是从中央仓库下载下来的依赖。
1、设置私服的访问用户名/密码(settings.xml中的servers中配置)
2、IDEA的maven工程的pom文件中配置上传(发布)地址
3、设置私服依赖下载的仓库组地址(settings.xml中的mirrors、profiles中配置)
mirrors配置
profiles配置
1、设置私服的访问用户名/密码(在自己maven安装目录下的conf/settings.xml中的servers中配置)
<server>
<id>maven-releasesid>
<username>adminusername>
<password>adminpassword>
server>
<server>
<id>maven-snapshotsid>
<username>adminusername>
<password>adminpassword>
server>
2、在mirrors中只配置我们自己私服的连接地址(配置过阿里云的不能注释掉),我的maven是3.8.6版本的,注释掉后maven同步会报错,在视频教程中需要注释掉可能是因为maven版本不同吧。
<mirror>
<id>maven-publicid>
<mirrorOf>*mirrorOf>
<url>http://192.168.150.101:8081/repository/maven-public/url>
mirror>
3、需要在 profiles 中,增加如下配置,来指定snapshot快照版本的依赖,依然允许使用
<profile>
<id>allow-snapshotsid>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
<repositories>
<repository>
<id>maven-publicid>
<url>http://192.168.150.101:8081/repository/maven-public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>trueenabled>
snapshots>
repository>
repositories>
profile>
4、如果需要上传自己的项目到私服上,需要在项目的pom.xml文件中,增加如下配置,来配置项目发布的地址(也就是私服的地址)
<distributionManagement>
<repository>
<id>maven-releasesid>
<url>http://192.168.150.101:8081/repository/maven-releases/url>
repository>
<snapshotRepository>
<id>maven-snapshotsid>
<url>http://192.168.150.101:8081/repository/maven-snapshots/url>
snapshotRepository>
distributionManagement>
5、发布项目,直接运行 deploy 生命周期即可 (发布时,建议跳过单元测试)
6、查看上传私服是否成功
注意事项
- 黑马提供的私服地址,不能直接使用
- 若使用本地私服,需要将配置文件中的所有
192.168.150.101
全部替换为127.0.0.1
- 若使用(natapp)内网穿透的方式模拟私服,需要将配置文件中的所有
192.168.150.101:8081
替换为natapp
提供的随机域名,访问地址:natapp
提供的域名- 使用(natapp)内网穿透的方式模拟私服可参考:http://t.csdnimg.cn/G07cS