Maven高级

Web后端开发_08

1.JavaWeb总结

1.1三层架构

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进行项目开发**的。

2.Maven高级

2.1简单介绍

  • 清理clean:将以前编译得到的旧文件class字节码文件删除
  • 编译compile:将java源程序编译成class字节码文件
  • 测试test:自动测试,自动调用junit程序
  • 报告report:测试程序执行的结果
  • 打包package:动态Web工程打War包,java工程打jar包
  • 安装install:Maven特定的概念-----将打包得到的文件复制到"仓库"中的指定位置
  • 部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行

2.2分模块设计与开发

2.2.1分模块设计

  • 为什么?

将一个大的项目拆分为若干个模块,比如拆分为商品模块、搜索模块、购物车模块、订单模块等,方便项目的管理维护、扩展,同时也方便模块间的相互调用,资源共享。

  • 实践

2.2.2分模块开发

  • 创建maven模块tlias-pojo,存放实体类。
  • 创建maven模块tlias-utils,存放相关工具类。

注意事项

  • 分模块开发需要先针对模块功能进行设计再进行编码。不会先将工程开发完毕,然后进行拆分。

2.2.3示例

  • 创建maven模块tlias-pojo,存放实体类。
  • 将com/bowen/pojo包下的所有类拷贝到tlias-pojo模块
  • 引入lombok依赖
xml 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
</dependency>
  • 删除tlias-web-management模块下的pojo包
  • 在tlias-web-management模块引入pojo依赖,引入依赖后刷新pom.xml,报错解决
xml 复制代码
<dependency>
    <groupId>com.bowen</groupId>
    <artifactId>tlias-pojo</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
  • 创建maven模块tlias-utils,存放相关工具类。
  • 在src/main/java文件下创建com.bowen目录,将tlias-web-management模块下的utils包拷贝到tlias-utils模块
  • 引入JWT、阿里云OSS、Web开发以及springboot的相关依赖
xml 复制代码
<dependencies>
    <!--JWT令牌-->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
    <!--阿里云OSS-->
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.15.1</version>
    </dependency>
    <!--Web开发的起步依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <version>2.7.16</version>
    </dependency>
    <!--lombok依赖-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
    </dependency>
    <!--springboot依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.7.16</version>
    </dependency>
</dependencies>
  • 在tlias-web-management模块引入utils依赖,引入依赖后刷新pom.xml,报错解决
xml 复制代码
<!--引入utils依赖-->
<dependency>
    <groupId>com.bowen</groupId>
    <artifactId>tlias-utils</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
  • 重启项目测试是否分模块成功
  • 启动nginx前端页面,登录后刷新员工管理页面,测试成功~~~,说明模块拆分没有问题

2.2.4小结

  1. 什么是分模块设计?
    • 将项目按照功能拆分成若干个子模块
  2. 为什么要分模块设计?
    • 方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享
  3. 注意事项
    • 分模块设计需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分

2.3继承与聚合

2.3.1继承

2.3.1.1介绍
  • 概念:继承描述的是两个工程之间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
  • 作用:简化依赖配置、统一管理依赖
  • 实现:<parent></parent>
2.3.1.2继承关系实现
  1. 创建maven模块tlias-parent,该工程为父工程 ,设置打包方式pom(默认jar)
  2. 子工程的pom.xml文件中,配置继承关系
  3. 父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)

jar:普通模块打包,springboot项目基本都是jar包(内嵌Tomcat运行)

war:普通web程序打包,需要部署在外部的Tomcat服务器中运行

pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理

  • 创建maven模块tlias-parent
  • 设置打包方式为pom,
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>

    <groupId>com.bowen</groupId>
    <artifactId>tlias-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.7.16</version>
        <relativePath/><!--从本地仓库中查找父工程-->
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>
  • 子工程 的pom.xml文件中,配置继承关系,同时删除<groupId>com.bowen</groupId>
xml 复制代码
<parent>
    <groupId>com.bowen</groupId>
    <artifactId>tlias-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../tlias-parent/pom.xml</relativePath>
</parent>
  • lombok的依赖引入拷贝到tlias-parent中的pom.xml文件中,同时删除tlias-pojo、tlias-utils、tlias-web-management模块的pom.xml文件中的lombok依赖,刷新pom
xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
    </dependency>
</dependencies>

注意事项

  • 在子工程中,配置了继承关系之后,坐标中的groupId是可以是可以省略的,因为会自动继承父工程的
  • relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程)
  • 配置继承关系图示
  • 父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)

注意事项

  • 若父子工程都配置了同一个依赖的不同版本,以子工程的为准
2.3.1.3小结
  • maven项目父子工程结构说明
2.3.1.4版本锁定
  • 在maven中,可以在父工程的pom文件中通过<dependencyManagement>来统一管理依赖版本

注意事项

  • 子工程引入依赖时,无需指定<version>版本号,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
  • 自定义属性/引用属性
2.3.1.5思考

<dependencyManagement><dependencies>的区别是什么?

  • <dependencies>是直接依赖,在父工程配置了依赖,子工程会直接继承下来
  • <dependencyManagement>是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)

2.3.2聚合

2.3.2.1介绍
  • 聚合:将多个模块组织成一个整体,同时进行项目的构建。
  • 聚合工程:一个不具有业务功能的"空"工程(有且仅有一个pom文件)
  • 作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)
2.3.2.2聚合功能实现
  • maven中可以通过<modules>设置当前聚合工程所包含的子模块名称

注意事项

  • 聚合工程所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关
  • 父工程
xml 复制代码
<!--聚合其他模块-->
<modules>
    <module>../tlias-pojo</module>
    <module>../tlias-utils</module>
    <module>../tlias-web-management</module>
</modules>
  • 更新完后,层级发生了变化
  • 最后在tlias-parent层级下的生命周期packeage打包项目
2.3.2.3继承与聚合
  • 作用
    • 聚合用于快速构建项目
    • 继承用于简化依赖配置、统一管理依赖
  • 相同点
    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
    • 聚合与继承均属于设计型模块,并无实际内容(仅需一个pom.xml文件即可)
  • 不同点
    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

2.4私服

2.4.1介绍

  • 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。
  • 依赖查找顺序
    1. 本地仓库
    2. 私服
    3. 中央仓库

注意事项

  • 私服在企业项目开发中,一个项目/公司,只需要一台即可(无需自己搭建,会使用即可)。

2.4.2资源上传与下载

项目版本

  • RELEASE(发行版本):功能区域稳定、当前更新停止,可用于发行的版本,存储在私服中的RELEASE仓库中。
  • SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服中的SNAPSHOT仓库中。

私服仓库说明:

  • RELEASE:存储自己开发的RELEASE发布版本的资源。
  • SNAPSHOT:存储自己开发的SNAPSHOT发布版本的资源。
  • Central:存储的是从中央仓库下载下来的依赖。

1、设置私服的访问用户名/密码(settings.xml中的servers中配置)

2、IDEA的maven工程的pom文件中配置上传(发布)地址

3、设置私服依赖下载的仓库组地址(settings.xml中的mirrors、profiles中配置)

mirrors配置

profiles配置

2.4.3示例(上传)

1、设置私服的访问用户名/密码(在自己maven安装目录下的conf/settings.xml中的servers中配置)

xml 复制代码
<server>
    <id>maven-releases</id>
    <username>admin</username>
    <password>admin</password>
</server>
    
<server>
    <id>maven-snapshots</id>
    <username>admin</username>
    <password>admin</password>
</server>

2、在mirrors中只配置我们自己私服的连接地址(配置过阿里云的不能注释掉),我的maven是3.8.6版本的,注释掉后maven同步会报错,在视频教程中需要注释掉可能是因为maven版本不同吧。

xml 复制代码
<mirror>
    <id>maven-public</id>
    <mirrorOf>*</mirrorOf>
    <url>http://192.168.150.101:8081/repository/maven-public/</url>
</mirror>

3、需要在 profiles 中,增加如下配置,来指定snapshot快照版本的依赖,依然允许使用

xml 复制代码
<profile>
    <id>allow-snapshots</id>
        <activation>
        	<activeByDefault>true</activeByDefault>
        </activation>
    <repositories>
        <repository>
            <id>maven-public</id>
            <url>http://192.168.150.101:8081/repository/maven-public/</url>
            <releases>
            	<enabled>true</enabled>
            </releases>
            <snapshots>
            	<enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</profile>

4、如果需要上传自己的项目到私服上,需要在项目的pom.xml文件中,增加如下配置,来配置项目发布的地址(也就是私服的地址)

xml 复制代码
<distributionManagement>
    <!-- release版本的发布地址 -->
    <repository>
        <id>maven-releases</id>
        <url>http://192.168.150.101:8081/repository/maven-releases/</url>
    </repository>
    
    <!-- snapshot版本的发布地址 -->
    <snapshotRepository>
        <id>maven-snapshots</id>
        <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
相关推荐
蓝天星空10 分钟前
spring cloud gateway 3
java·spring cloud
罗政15 分钟前
PDF书籍《手写调用链监控APM系统-Java版》第9章 插件与链路的结合:Mysql插件实现
java·mysql·pdf
一根稻草君21 分钟前
利用poi写一个工具类导出逐级合并的单元格的Excel(通用)
java·excel
kirito学长-Java23 分钟前
springboot/ssm网上宠物店系统Java代码编写web宠物用品商城项目
java·spring boot·后端
木头没有瓜38 分钟前
ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
android·java·okhttp
奋斗的老史38 分钟前
Spring Retry + Redis Watch实现高并发乐观锁
java·redis·spring
high201140 分钟前
【Java 基础】-- ArrayList 和 Linkedlist
java·开发语言
老马啸西风1 小时前
NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character
java
Cosmoshhhyyy1 小时前
LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
java·leetcode·哈希算法