管理和构建java项目的工具
方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
只需要在配置文件pom中描述
maven统一项目结构:
src:
------main(实际项目资源)
------------java(java源代码目录)
------------resource(配置文件目录)
------text(测试项目资源)
------pom.xml(项目配置文件)
标准跨平台(Linux、Windows、MacOS)的自动化项目构建工具
自动:
清理、编译、测试、打包、发布
通过插件实现标准化构建
项目对象模型
依赖管理模型
仓库:存储资源、管理jar包
分为:本地、中央、远程仓库
引入后要重新加载才会生效
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
dependencies>
依赖其他项目会依赖其他项目依赖的包
可以通过exclusions排除不想要的依赖
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.3version>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
exclusion>
exclusions>
dependency>
通过scops设置作用范围(默认整个模块)
取值:
compile(默认):主程序+测试程序+打包
test:测试程序
provided:主程序、测试程序
runtime:测试程序、打包
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>//只在test有效
dependency>
dependencies>
对所有项目构建过程进行抽象和统一
3套相互独立的生命周期:
clean:清理工作
default:核心工作:编译、打包等
site:生成报告、发布站点等
clean
clean:移除上次构建生成的文件
default
compile:编译项目源代码
test:使用合适的单元测试框架进行测试
package:将编译后的文件打包,如jar、war等
install:安装项目到本地仓库
同一个生命周期
运行后面也会运行前面步骤
创建springboot工程、选择web开发
定义HelloController,添加hello方法、添加注解
运行测试
package com.example.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
@RestController//请求处理类
@RequestMapping(响应的请求)//请求处理方法
规定浏览器和服务器数据传输的规则
特点:
基于TCP协议:面向连接、安全
基于请求响应模型:一次请求一次响应
无状态协议:
对事务没有记忆能力、每次请求-响应都是独立的
缺点:多次请求不能共享数据
优点:速度快
GET /hello HTTP/1.1 请求方式、资源路径、协议(请求行)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Host: localhost:8080
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36
sec-ch-ua: "Google Chrome";v="137", "Chromium";v="137", "Not/A)Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
请求头:
Host:请求主机名
User-Agent:浏览器版本
Accept:浏览器接收信息类型
Accept-Language:浏览器偏好的语言
Accept-Encoding:浏览器可以支持的压缩类型
Content-Type:请求主体的数据类型
Content-Length:请求主体的大小(单位字节)
请求体(post特有):
get:请求参数在请求行
post:请求参数在请求体
HTTP/1.1 200 OK 响应行(协议、状态码、描述)
Content-Type: text/html;charset=UTF-8
Content-Length:11
Date: Thu, 05 Jun 2025 08:18:19 GMT
Keep-Alive: timeout=60
Connection: keep-alive
响应行:
状态码:
1xx:响应中:你没发送完整我等着
2xx:成功
3xx:重定向:资源不在我这里,我给你指路,你去找
4xx:客户端错误
5xx:服务端错误
响应头:
Content-Type:响应内容的数据类型
Content-Length:响应内容的字节数(单位字节)
Content-Encoding:响应压缩算法
Cache-Control:客户端如何缓存
Set-Cookie:为当前页面所在域设置cookie
响应体:
与响应头隔一行
响应回来的数据