【SpringBoot+Vue自学笔记】003 SpringBoot Controll
跟着这位老师学习的:https://www.bilibili.com/video/BV1nV4y1s7ZN?vd_source=af46ae3e8740f44ad87ced5536fc1a45
这段话的意思其实是:Spring Boot 简化了传统 Web 项目的搭建流程,让你少折腾配置,直接开搞业务逻辑。
🔧 传统 Web 项目的问题
在没有 Spring Boot 之前,我们想写一个 Web 项目,至少得配置好这些:
-
Spring MVC:处理请求和返回视图或 JSON。
-
Jackson(或其他):处理 JSON 序列化/反序列化。
-
Tomcat:Web 容器,还得自己安装和部署。
-
再加一堆配置文件才能跑起来。
每一部分都要手动整合,稍有差错就报错,搭建项目成了一种“玄学”。
🧰 Spring Boot 的简化方式
Spring Boot 提供了一个组件:
👉 spring-boot-starter-web
它是个“启动器”,只要你在创建项目时勾选了 Spring Web,
这个启动器就自动加入了进来,里面已经帮你 整合好了你需要的大部分依赖:
🚀 spring-boot-starter-web
里面包括:
-
spring-web
+spring-webmvc
:支持 Web 请求的处理,MVC 模式。 -
jackson-databind
:用于处理 JSON,帮你自动把对象转成 JSON 发给前端。 -
内嵌
tomcat
:你不再需要自己装 Tomcat,它内置好了,点个运行就能启动服务。
Tomcat 是一个 Web 服务器,也叫 Servlet 容器。
它最主要的作用是:
📦「运行你的 Web 项目,处理 HTTP 请求」
你写的 Spring Boot 应用,前端发来的 HTTP 请求,
最后都是由 Tomcat 来接收、分发、处理、响应的。
假如你写了个接口:
@GetMapping("/hello")
public String sayHello() {return "Hello";
}
用户在浏览器访问:
http://localhost:8080/hello
就是 Tomcat:
-
接收这个请求
-
把它交给 Spring 处理
-
然后 Spring 把结果返回给 Tomcat
-
Tomcat 最后把结果响应给前端
个人理解不一定对:
整个流程像一条流水线,从浏览器发起请求开始,到最终收到响应为止,可以分为下面这几步——每一环都刚刚好接上下一环:
✅ 1. 浏览器发送请求
用户在页面点击某个按钮,比如发帖,前端通过 axios
发出 HTTP 请求(如:POST /api/posts
)。
✅ 2. 请求被 Tomcat 接收到
Spring Boot 内嵌的 Tomcat 是个 Web 服务器,它监听端口(比如 8080),收到请求之后,把请求传给 Spring 的处理核心。
✅ 3. DispatcherServlet 拦截请求
这是 Spring MVC 的总调度,叫 “前端控制器”。
它接到请求后,开始派活:
-
查找对应的 Controller
-
根据请求路径、方法类型(GET/POST)来定位到具体方法,比如
PostController.createPost()
✅ 4. Controller 执行方法
你的 Controller 接到请求,拿到参数(比如表单内容),调用服务层逻辑,最终返回一个 Java 对象,比如:
return new Result("发布成功", postId);
✅ 5. 返回对象被转换成 JSON
Spring 内置的 JSON 处理器是 Jackson。
它把 Java 对象变成 JSON 字符串,比如:
{ "message": "发布成功", "data": 101 }
✅ 6. DispatcherServlet 把 JSON 塞进响应里
调度器拿到 JSON 后,放进 HttpServletResponse
里,准备发送。
✅ 7. Tomcat 把响应发回浏览器
Tomcat 把 HTTP 响应封装好,通过 TCP 发回用户浏览器。
✅ 8. 浏览器收到响应,前端页面更新
前端拿到 JSON 数据,展示“发布成功”的提示,或更新帖子列表等。
整个过程,是从浏览器 → Tomcat → DispatcherServlet → Controller → Jackson → DispatcherServlet → Tomcat → 浏览器。
每个部分就像一环扣一环的“链条”,中间没有哪一步是可以省略的。
MVC:model,view,controller
@controller 必须返回一个视图,必须返回一个html页面(用Thymeleaf前后端不分离)
参数映射:
@RequestMapping(value="/getTest3" ,method = RequestMethod.GET)
//http//localhost:8080/qetTest2?nickname=xxx
PUblic String getTest3(@RequestParam("nickname")String.name){System.out.println("nickname:"+name) ;return "GET 请求';
}
用了@RequestParam,则nickname必须被访问到,不能为空,否则这个方法不能被访问到,使用required = false则可以不访问
@RequestMapping(value="/getTest3" ,method = RequestMethod.GET)
//http//localhost:8080/qetTest2?nickname=xxx
PUblic String getTest3(@RequestParam(value = "nickname",required = false)String.name){System.out.println("nickname:"+name) ;return "GET 请求';
}
@RequestBody:接收json数据。