Maven&Springboot内容
前置
在Windows条件下启动nginx
开启nginx 从nginx路径下输入nginx.exe
关闭nginx 重新启动窗口输入nginx -s stop
重新加载nginx 启动窗口输入 nginx -s reload
检查nginx的配置文件语法格式是否正确,nginx -t
nginx的端口上80
80端口走的是http协议,80端口在浏览器上访问可以省略的。
nginx是静态资源服务器,静态资源:不走数据库的就是静态资源
Maven
初识Maven
统一了一个标准,后边所有的项目都是按照一个模型出来的。使用起来不会出现太多的额外状况。
基于java来实现的一个管理和控制项目的软件
Maven的作用:
- 依赖管理 :jar包就找Manven要。
- 提供了统一的项目结构。
- 一键构建。参与从源码到发布的各个过程。
Maven可以理解为管家,我们只需要提要求,maven帮我们去实现。
项目对象模型:POM 通过一小段描述信息来管理项目的构建、报告和文档。
创建包名?
公司域名:www.qq.com/www.baidu.com
域名反写:com.qq /com.baidu
项目名称:springboot_quickstart
com.qq.bootdemo
子包 :
com.qq.bootdemo
- web
- service
- mapper
Maven概概述
Maven模型仓库
仓库:用于存储资源,管理各种jar包
仓库的本质就是一个目录(文件夹),这个目录就被用来存储开发中所有依赖和插件
Maven和jar包的关系:
我们开发者问maven要jar包,对于maven来说需要给我们提供jar包。已经有的可以直接提供,不存在的jar包maven会去中央仓库找,
**中央仓库是什么意思呢?**由Maven团队维护的全球唯一的,中央仓库是阿帕奇进行维护jar包的仓库,中央仓库在国外,下载速度很慢 中央仓库的地址是https://repo1.maven.org/maven2/
maven的下载流程:maven先去本地仓库找,本地仓库没有就去私服查找,私服没有就去中央仓库进行查找,如果有就直接下载,如果中央仓库不存在jar包就没有办法了
**什么叫本地仓库?**我们自己从网上git下来的就是本地仓库。
私服:一般由公司团队搭建的私有仓库
Maven模型
- 项目对象模型
- 依赖管理模型 --依赖管理
- 构建生命周期/阶段 --一键构建 maven是可以参与项目从源码阶段到发布阶段的整个过程‘管家’/maven通过一个个的插件来帮助我们实现对应的功能
功能介绍
1、构建生命周期阶段(Build lifecycle & phases)
2、项目对象模型
3、依赖管理模型(Dependency)
在pom中配置depedencies,需要什么jar包就添加进去。
一组标签用来藐视一个唯一的jar包,一组
这么一个标签可以成为坐标也称之为依赖。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope><!--scope是作用范围-->,
<!--默认的是Complie一直有效
test单元测试有效
provided在写代码期间有效,运行的时候就没了 -->
</dependency>
</dependencies>
所谓唯一:
groupId==》组织名/公司名
artifactId==》产品
version==》定义唯一的版本号
看到点就是目录,就要再往下找。
Maven项目管理
pom配置详解
POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。
- 使用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">
<!-- POM模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 当前项目坐标 -->
<groupId>com.itheima</groupId>
<artifactId>maven_project1</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>jar</packaging>
</project>
pom文件详解:
- :pom文件的根标签,表示当前maven项目
- :声明项目描述遵循哪一个POM模型版本
- 虽然模型本身的版本很少改变,但它仍然是必不可少的。目前POM模型版本是4.0.0
- 坐标 :、、
- 定位项目在本地仓库中的位置,由以上三个标签组成一个坐标
- :maven项目的打包方式,通常设置为jar或war(默认值:jar)
Maven坐标详解
什么是坐标?
- Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置
- 使用坐标来定义项目或引入项目中需要的依赖
Maven坐标主要组成
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima) 一般是公司域名的反写
- artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service) 产品名称
- version:定义当前项目版本号
如下图就是使用坐标表示一个项目:
<groupId>com.itheima</groupId>
<artifactId>maven_demo</artifactId>
<version>1.0-SNAPSHOT</version>
注意:
- 上面所说的资源可以是插件、依赖、当前项目。
- 我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。
properties作用:
1、定义共有的属性。可以理解为临时的变量
2、约定程序的版本信息
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
依赖管理
依赖配置
依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖:
例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件中,引入logback的依赖。具体步骤如下:
- 在pom.xml中编写标签
- 在标签中使用引入坐标
- 定义坐标的 groupId、artifactId、version
注意顺序不要乱顺序
如果引入的依赖,在本地仓库中不存在,将会连接远程仓库 / 中央仓库,然后下载依赖(这个过程会比较耗时,耐心等待)
<dependencies>
<!-- 第1个依赖 : logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<!-- 第2个依赖 : junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
依赖传递
依赖具有传递性
早期我们没有使用maven时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下。如下图所示,需要logback-classic时,由于logback-classic又依赖了logback-core和slf4j,所以必须把这3个jar包全部复制到项目工程下
快捷键:ctrl+alt+空格 可以把信息补全出来
依赖传递可以分为:
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
依赖传递:
a
b
c
a和b 直接依赖
a和c 简介依赖
排除依赖
什么是排除依赖?
- 排除依赖:指主动断开依赖的资源。(被排除的资源无需指定版本)
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven-projectB</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖, 主动断开依赖的资源-->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
排除依赖:
a
b
c
a不知道c的存在要在b中配置
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖范围
依赖的作用范围
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包运行(package指令范围内)
<!--给当前的项目设置junit -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope><!--作用范围,默认的是Complie-->
<!--程序 依赖a =》为了写代码不报错,程序打包的时候也没有a的代码
写代码 是编译=》检查语法有没有错误
程序.jar =>里边都是可以执行的代码 程序没有a
服务器上有a,
provided只有两个jar包和他有关系
一个是servlet
另外一个是jsp。
-->
</dependency>
</dependencies>
compile 一直存在
test 测试中存在
provided 写代码能导报,运行的时候不存在(别人已经提供了!!!)
生命周期
三套生命周期
clean 清理(删除trget目录) 常用
mvn clean 删除target
default 默认(项目从源码阶段到部署阶段) 常用
mvn compile 编译代码,生成target
mvn test 先执行compile 生成target,直接单元测试
mvn package 先执行compile 然后执行test,最后将代码打包(jar/war/pom:父子工程)
mvn install 先执行compile,然后执行test,在执行package,最后把jar包安装到本地仓库
site 站点 没用
生命周期的对应命令是按照先后顺序走的,中途断了不会继续往后运行了!!!
Springboot入门
boot模板:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.3</version>
</plugin>
</plugins>
</build>
快速入门
简介:spring makes java simp
https://spring.io
springboot是基于springFramework。
优点:
- 简化配置
- 快速开发
spring boot 可以帮助我们非常快速地构建应用程序、简化开发、提高效率
javaweb本质:通过浏览器访问去执行特定的java代码
class能够玩的是反射,以后看到xxx.class
- cv坐标
- 编写项目启动类
- _/项目启动类/
_@SpringBootApplication
public class BootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(BootDemoApplication.class,args);
}
}
- _/项目启动类/
- 页面功能类
- _/页面功能类/
_@RestController
public class HelloController {
@RequestMapping(“/hello”)
public String hello(){
return “hello 王佳伟”;
}
}
- _/页面功能类/
开发步骤
web分析
HTTP协议
介绍
本质是通过一个路径敲回车能到java后台中的路径中并执行java代码
web是基于http1.0和http1.1的版本
HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。
- http是互联网上应用最为广泛的一种网络协议
- http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输
结论:一来一回,一来指的是访问服务器,一回值得是回应浏览器
特点:
3次握手/4次挥手==>面试的标准
- 基于TCP协议:面向连接,安全
- 基于请求-响应模型
http协议本身是无状态的,每次请求都是独立的,如果要数据共享的话,http是做不到的,需要配合后台通过会话技术来实现的。
协议概述
请求协议
先有请求再有访问
GET :get没有请求体
POST:存在请求体,写的的任何参数都是在请求体中。
PUT
DELETE
OPTIONS:问询请求,前端处理
请求格式:
请求格式: 分为四部分
请求行:
GET /hello HTTP/1.1
、 使用空格进行区分的
GET 是请求方式,/hello是访问路径,HTTP/1.1 是/请求协议/版本号
请求头:
请求头是以Key:value 形式体现的
记住:content-type:表示数据通过那种格式传递到后台
请求空行
请求体
响应协议
格式介绍
回应格式
回应格式: 分为四部分
回应行:
HTTP/1.1 200
协议/ 200是状态码:
回应头:
Content-Type: text/html;charset=UTF-8
Content-Type:指的后台通过那种格式返回给浏览器
回应空行
回应体:上边响应看到
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Content-Length: 10
Date: Sun, 16 Jul 2023 02:08:06 GMT
Keep-Alive: timeout=60
Connection: keep-alive
响应状态码
200表示成功
302表示重定向
304表示本地缓存(仅限于get请求)
400表示坏的请求(boot框架,如果参数对不上会出现这个问题)参数错了
404表示路径写错了
405表示方式没有被允许
500表示代码写错了
WEB服务器-Tomcat
介绍
服务器指的是硬件和软件
特点:免费 开源
Web服务器
Tomcat
Tomcat服务器软件是一个免费的开源的web应用服务器。是Apache软件基金会的一个核心项目。由Apache,Sun和其他一些公司及个人共同开发而成。
由于Tomcat只支持Servlet/JSP少量JavaEE规范,所以是一个开源免费的轻量级Web服务器。
JavaEE规范: JavaEE => Java Enterprise Edition(Java企业版)
avaEE规范就是指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF
jsp几乎淘汰掉了,每次运行都要编译,很麻烦
因为Tomcat支持Servlet/JSP规范,所以Tomcat也被称为Web容器、Servlet容器。JavaWeb程序需要依赖Tomcat才能运行。
Tomcat的官网: https://tomcat.apache.org/
基本使用
解压之后使用startup.bak运行
入门程序解析
与上次手动创建最终效果一致
起步依赖
spring-boot-starter-web和spring-boot-starter-test,在SpringBoot中又称为:起步依赖
而在SpringBoot的项目中,有很多的起步依赖,他们有一个共同的特征:就是以spring-boot-starter-作为开头。在以后大家遇到spring-boot-starter-xxx这类的依赖,都为起步依赖。
起步依赖有什么特殊之处呢,这里我们以入门案例中引入的起步依赖做为讲解:
- spring-boot-starter-web:包含了web应用开发所需要的常见依赖
- spring-boot-starter-test:包含了单元测试所需要的常见依赖
spring-boot-starter-web内部把关于Web开发所有的依赖都已经导入并且指定了版本,只需引入 spring-boot-starter-web 依赖就可以实现Web开发的需要的功能
SpringBoot父工程
在我们之前开发的SpringBoot入门案例中,我们通过maven引入的依赖,是没有指定具体的依赖版本号的。
已经整合了很多的左边,用什么就配置什么,剩下的局势SpringBoot给你搞定
要啥找boot要,要来直接使用。