当前位置: 首页 > news >正文

基于SpringBootWeb的相关问题解答

Spring Boot Web简介

SpringBootWebSpringBoot框架中用于简化Web应用开发的模块,整合了SpringMVC(模型-视图-控制器)和其他Web相关依赖。它通过自动配置和默认约定,快速构建基于HTTP协议RESTful API或传统Web应用。

RESTful API:

是一套设计 Web 接口的规范 / 风格,用来统一接口怎么写、怎么命名、怎么调用。用于解决接口混乱、不统一、难维护的问题。

核心规则

  1. 接口地址用名词,不用动词

    • 用户:/users
    • 文章:/articles
  2. 用 HTTP 方法表示要做什么操作

    • GET:查询
    • POST:新增
    • PUT:修改
    • DELETE:删除

这里讲到的接口实际上指的是api接口而不是之前学的Java 语法里的 interface(接口)

例如:

http://localhost:8080/hello

http://是协议类型,定义客户端与服务器通信的规则

localhost是主机名/IP地址

:8080是端口号,指定服务器监听的网络端口

/hello是路径(或端点),由服务器定义的资源标识。

端口和路径可通过application.properties修改:

server.port=9090 server.servlet.context-path=/api
http://localhost:8080

合起来的意思=通过网络规则,访问我自己电脑上的 8080 号房间

这个房间,就是启动的Spring Boot 内置服务器(Tomcat)

这个接口是通过下面代码运行后,产生的那个网址。

@RestController // 这是类 public class XxController { @GetMapping("/hello")//网址名 public String hello() { // 这是方法 return "xxx"; } }

@RestController把这个类变成一个请求处理类

  • 这个方法被@GetMapping标记后,就变成了一个可以访问的 API 接口
  • 所以:类是载体,接口是功能出口。
  • 一个方法对应一个地址名

1.自己跑 main 方法

方法之间互相调用

不需要网址

2.给浏览器 / APP / 前端用

别人要通过地址找到你

所以必须给方法加一个网址(@GetMapping)

springboot跟springbootweb

springboot:

是一套快速搭建 Java 项目的框架:用于

  • 连接数据库
  • 写定时任务
  • 做消息队列
  • 写接口、网页
  • 开发桌面程序(很少)
  • 做后端微服务

可以把SpringBoot 当成一个 “万能工具箱”,里面有各种各样的工具。

springbootweb:

是 SpringBoot 里专门用来做 Web 项目的工具包,全称叫:

spring-boot-starter-web

加了它,你就能:

  • 写接口(@Controller/@RestController
  • 接收前端请求
  • 做前后端交互
  • 启动一个内置的 Tomcat 服务器

不加它,你的 SpringBoot 项目就只是个普通 Java 程序,不能接收网页 / 接口请求。

只有 SpringBoot,不加 web

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>

→ 能运行,但不能写接口,不能启动网页服务

加了 web(SpringBoot Web 项目)

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

→ 才能写@GetMapping这类接口,才能启动服务让前端调用

  • spring-boot-starter= SpringBoot 核心基础包
  • spring-boot-starter-web内部已经依赖了它,所以加了 web 就不用再加那个基础的依赖了,它会自动带进来

web项目:

就是能通过网络接收请求、提供接口或页面,让浏览器、APP、小程序都能访问的后端服务。

Web 项目必须具备的 4 个特征

① 有地址(URL / IP + 端口)

比如:

  • http://localhost:8080

  • https://www.baidu.com

没有地址,别人找不到你,就不是 Web 项目。

② 能接收网络请求

浏览器、APP、小程序、别的服务,都能通过网络给它发消息。

比如:

  • 浏览器输入地址

  • APP 加载首页数据

  • 小程序获取用户信息

这些都叫请求

③ 能返回内容

Web 项目收到请求后,会返回东西:

  • 网页(HTML)

  • 数据(JSON)

  • 图片、文件

④ 长期运行,不退出

普通 Java 程序运行完 main 方法就结束了。Web 项目启动后会一直等着请求,不会自己停。

springboot中前后端交互方式

前端(浏览器、Vue、小程序等) ←→ 后端(SpringBoot 接口)就是用 HTTP/HTTPS 通信的

1. 本质就是:HTTP 请求 + 响应

  • 前端发:HTTP 请求报文(GET/POST/PUT/DELETE)
  • SpringBoot 接收到,处理完业务
  • SpringBoot 返回:HTTP 响应报文(JSON 数据)

HTTP

概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

特点:

  1. 基于TCP协议:面向连接,安全
  2. 基于请求—响应模型:一次请求对应一次响应
  3. HTTP协议是无状态的协议,对于事务处理没有记忆性,每次请求响应都是独立的。
  • 缺点:多次响应请求之间不能共享数据
  • 优点:速度快

连接过程:

1. 先建立连接:TCP 三次握手。

在地址栏输入网址敲回车后,第一步不是直接发数据,而是先 “打招呼” 建立可靠连接。

如果是HTTPS,还会多一步:

  • 交换证书、加密密钥
  • 之后所有数据都会加密传输,别人抓包也看不懂。

2. 浏览器发请求:HTTP Request

浏览器会打包一个请求报文发给服务器,

请求数据格式为:

【请求行】 第一行,必须有 【请求头】 多行键值对 【空行】 必须有,单独一行 【请求体】 可选,POST/PUT 才有

请求行格式Request Line

---->请求方式 URL 协议版本

请求方式有GET(查数据,那页面),POST提交数据(登录、注册、上传),PUT等

URL就是你访问的路径,如/index.html/api/login

  • HTTP 请求行里写的那个 URL,只是网址的后半截路径,端口后那部分

协议版本一般是HTTP/1.1HTTP/2

请求头格式Request Headers

从第二行开始,一堆key: value格式,每行一个。

Host: www.baidu.com // 必须有,目标主机名(域名) User-Agent: Chrome/120... // 我是什么浏览器/客户端 Accept: text/html // 我能接收什么类型数据 Content-Type: application/x-www-form-urlencoded // 提交数据格式 Cookie: xxx=yyy // 身份凭证 Connection: keep-alive // 保持连接

3. 空行

必须有,而且只能是一行空行作用:

告诉服务器:请求头到此结束,下面开始是请求体。

没有这个空行,服务器会把请求体当成请求头,直接报错。

请求体格式Request Body

GET 一般没有请求体!只有 POST、PUT 等才会带。

存放要提交给服务器的数据:

  • 表单格式:username=zhangsan&password=123456
  • JSON 格式:{"username":"zhangsan","password":"123456"}

GET请求方式:请求参数在请求行中,没有请求体。请求大小是有限制的。

POST请求方式:请求参数在请求体中,请求大小无限制

3. 服务器处理并返回响应

服务器收到后:

  1. 解析你要什么资源
  2. 查文件 / 查数据库 / 跑后端代码
  3. 生成一个响应报文发回浏览器

响应格式:

【响应行】 第一行,必须有 【响应头】 多行键值对 【空行】 必须有,单独一行 【响应体】

响应行格式

协议版本 状态码 状态描述

eg: HTTP/1.1 200 OK

常见状态码:
  • 200 OK:成功
  • 301/302:重定向(跳转)
  • 404 Not Found:页面找不到
  • 500 Internal Server Error:服务器崩了
  • 403 Forbidden:禁止访问
  • 401 Unauthorized:没登录

响应头格式:

和请求头一样,也是一堆key: value

服务器告诉浏览器:

  • 这是什么内容
  • 多长
  • 用什么编码
  • 要不要缓存
  • 给你发个 Cookie 等
Content-Type: text/html; charset=UTF-8 Content-Length: 1024 Server: nginx Set-Cookie: sessionId=abc123; Cache-Control: no-cache

空行:

必须有,和请求一样作用:告诉浏览器 “头结束了,下面是内容”

响应体格式:

服务器真正返回给你的东西:

  • 访问网页 → 返回HTML
  • 请求接口 → 返回JSON
  • 看图片 → 返回图片二进制数据

ServerSocket

Java 网络编程中专门用于服务端的核心类(位于java.net包下),它的唯一使命是:监听客户端的连接请求,并建立与客户端的通信通道。通道建立后会创建一个 Socket用于读取数据(读到一串 HTTP 文本)

// 1. 创建 ServerSocket,监听 8080 端口 ServerSocket serverSocket = new ServerSocket(8080); while (true) { // 2. 阻塞,等着客户端来连接 Socket socket = serverSocket.accept(); // 3. 接到连接!交给线程处理 new Thread(() -> { // 4. 读取客户端发来的数据(HTTP 报文) InputStream input = socket.getInputStream(); // 5. 这里开始做 HTTP 解析! // 解析方法、URL、头、体 }).start(); }

谁来解析 HTTP?

你自己写的解析代码或者Tomcat/Jetty 内置的解析器

添加以下依赖就有tomcat解析器

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

Tomcat 的操作

通过socket读取请求报文后开始解析并创建两个HttpServletRequest / HttpServletResponse空对象。把socket中的报文解析后存入HttpServletRequest中。然后Tomcat把这两个对象传给后端写的 Controller / Servlet

@GetMapping("/") public String hello() { return "Hello World"; }

执行代码把运行结果放入HttpServletResponse中,Tomcat再拿到HttpServletResponse中的内容,取出并自动拼接成响应报文,通过socket里的方法发回给浏览器。

hppt协议解析

http报文都会被解析,因为计算机只认二进制和结构化数据,不认人类写的文本

浏览器发给服务器的是一段纯文本字符串

GET /user?id=1 HTTP/1.1 Host: localhost User-Agent: xxx

解析方式

就是按 HTTP 固定格式,一段一段切字符串,是一行一行拆分

解析器会先按换行符\r\n把整个报文切成多行,拆完之后存入对象中,比如java里。

请求行

String method = "GET"; String url = "/user?id=1"; String version = "HTTP/1.1";

请求头

Host: localhost → key=Host, value=localhost User-Agent: xxx → key=User-Agent, value=xxx

最终成这个样子

class HttpRequest { String method; // GET String url; // /user Map<String,String> headers;//请求头 byte[] body;//请求体 }

解析请求体

根据请求头里的Content-LengthTransfer-Encoding读取 body 内容。

比如Content-Length: 27告诉解析器:往后读 27 个字节,就是 body

读完后放进:

byte[] body;
整个流程 浏览器请求 ↓ ServerSocket 监听并接收连接 ↓ Socket 读取原始 HTTP 文本(未解析) ↓ HTTP 解析器(Tomcat)解析报文生成两个对象 ↓ 根据 URL 找到你写的 Controller 方法并执行 ↓ 生成响应对象 → 拼成 HTTP 响应文本 ↓ 通过 Socket 写回浏览器 ↓ 浏览器解析响应 → 展示页面

4. 数据在路上怎么传?

你看到的是 “一段文字 / 一张图片”,但网络上实际是:

  • 数据被拆成很多小IP 数据包
  • 经过路由器、交换机一层层转发
  • 到达后再按顺序拼回完整内容

这一层是传输层 + 网络层干的事,浏览器和服务器不用关心。


5. 浏览器渲染展示

浏览器拿到 HTML/CSS/JS 后:

  • 解析 HTML 生成 DOM 树
  • 解析 CSS 生成样式树
  • 合成渲染树,画出页面
  • JS 执行逻辑、发异步请求(AJAX/fetch)

.断开连接(可选)

用完后:

  • 可以直接断开(TCP 四次挥手)
  • 也可以保持连接,复用它发下一个请求(HTTP 长连接)

总结

  1. 浏览器通过DNS(DNS会把我输入的网址里的域名翻译成ip地址,因为电脑跟路由器只认ip地址)找到服务器 IP
  2. 建立TCP 连接,HTTPS 再加加密
  3. 浏览器发HTTP 请求
  4. 服务器处理后回HTTP 响应
  5. 数据拆包传输,到达后重组
  6. 浏览器渲染页面

网址(URL)的结构

协议:// 域名:端口 / 路径?参数 #锚点

即https://www.baidu.com:8080/s?wd=java&page=1#top

http://www.jsqmd.com/news/600150/

相关文章:

  • 【Coze-AI智能体平台】Coze智能体实操:翻译助手从工作流搭建到应用发布全流程详解
  • 个人游戏笔记本免费“养龙虾”(Win10+WSL2+OpenClaw 部署与配置指南)
  • PyCharm 性能调优避坑录③:缓存与索引进阶优化|彻底告别重复索引、大型项目秒开
  • 双边滤波在图像去噪中的应用及MATLAB实现详解
  • OpenClaw定时任务管理:Phi-3-vision-128k-instruct每日早报自动生成系统
  • 2026/4/5 学习日志
  • 泰凌微TLSR8208蓝牙芯片透传数据‘吞字节’?一个SDK版本差异引发的血泪排查史
  • 冷却水小流量大温差对冷水机的影响
  • 综合修理厂适用汽车维修管理系统推荐指南 - 优质品牌商家
  • 【MySQL知识点问答题】组复制、管理工具与高可用恢复实践
  • 如何高效提取Android OTA包:payload-dumper-go完整使用指南
  • 收藏!Java后端转AI大模型开发:8年经验踩坑总结,2026最实用转型指南
  • OpenClaw智能旅行规划:Qwen3.5-9B整合航班酒店生成最优行程
  • Windows文件管理器终极美化指南:5分钟实现专业级透明效果
  • mysql数据库连接超时如何排查_检查网络延迟与连接池配置
  • LoRA与QLoRA显存优化指南:如何在小显存设备上高效训练大模型
  • 量子蒙特卡罗在材料科学中的7个神奇应用:从超导体设计到电池优化
  • 收藏 | 小白程序员必看:揭秘ChatGLM、Qwen等大模型的“进化史”与微调秘籍
  • 千问3.5-27B微调实践:提升OpenClaw任务执行准确率
  • [复现]神经网络(NN)+模型预测控制(MPC)算法、四旋翼无人机+非线性机器人汽车系统研究(Matlab代码实现)
  • 从‘炼丹’到‘配药’:手把手教你用Hugging Face玩转最新指令数据集(以Leopard-Instruct为例)
  • FastAPI 部署 NLP 模型实战:从 BERT 文本分类到生产级接口实现
  • 内容审核自动化:OpenClaw调用Qwen2.5-VL-7B过滤违规图片
  • OpenClaw开源贡献:为Qwen3.5-9B-AWQ-4bit开发社区技能
  • OpenClaw批量处理技巧:千问3.5-35B-A3B-FP8驱动百张图片分析
  • 2026 毕业季终极破局指南:PaperXie 四大降重板块实测,把 AIGC 率从 99.8% 压到 14.9% 的底层逻辑
  • 土木本科生的 STM32 探索之旅:从零点亮 SSD1306OLED 屏幕,驱动显示实战
  • ABAQUS盾构管片精细化建模教程:CAE源文件详解及录屏演示,涵盖单环多环建模,环宽与管片厚...
  • 开发环境神器:OpenClaw+Qwen3-14B镜像自动化调试与日志分析
  • 2026年04月单槽超声波清洗机优质厂家推荐指南 - 优质品牌商家