SpringMVC1
一、Tomcat 多服务与资源路径
- 一个 Tomcat 跑多个服务:
Tomcat 作为 Servlet 容器,默认端口是 8080。它可以同时部署多个 Web 应用(比如图中的 A、B、C),每个应用对应不同的资源路径。比如 http://127.0.0.1:8080/A/ 就是访问 A 应用的根路径,以此类推。这里的 127.0.0.1 是本地回环地址,代表当前机器。
- context path 和 servlet path:
context path 是应用的上下文路径(比如 /A ),servlet path 是具体 Servlet 的路径。Spring 框架底层依赖 Servlet 技术,所以说 Spring 是基于 Servlet 开发的。
二、HTTP 状态码
- 1xx(信息响应):表示请求已接收,继续处理。
- 2xx(成功):比如 200 OK,表示请求成功。
- 3xx(重定向):像 301 永久重定向、302 临时重定向。
- 4xx(客户端错误):
- 404 Not Found:资源不存在,比如请求了一个不存在的网页。
- 403 Forbidden:服务器拒绝请求,没有权限访问。
- 401 Unauthorized:未授权,需要认证。
- 405 Method Not Allowed:请求方法不被允许,比如用 GET 方法访问只允许 POST 的接口。
- 5xx(服务器错误):
- 500 Internal Server Error:服务器内部出错,比如代码抛异常。
- 502 Bad Gateway:网关错误,比如反向代理时后端服务不可用。
- 504 Gateway Timeout:网关超时,请求后端服务超时。
三、连接失败案例
- 错误信息: The connection to '127.0.0.1' failed. Error: ConnectionRefused (0x274D). System.Net.Sockets.SocketException 由于目标计算机积极拒绝,无法连接。 127.0.0.1:8080
- 原因:这通常是因为 Tomcat 没启动,或者端口被占用,导致客户端(比如浏览器、Fiddler)连不上 127.0.0.1:8080 。
四、Spring 家族关系
- SpringBoot、SpringMVC、Spring Framework 不是互斥的:
- Spring Framework:是基础框架,提供 IoC、AOP 等核心功能。
- SpringMVC:是基于 Spring 的 Web 框架,处理 Web 请求。
- SpringBoot:是快速开发框架,内置了 Tomcat(默认端口 12306,图中举例)、自动配置等,简化了 Spring 应用的搭建。
- 关系:SpringBoot 可以包含 SpringMVC,SpringMVC 属于 Spring Framework 的一部分。
五、SpringMVC 工作流程(MVC 模式)
- Model(模型):处理业务逻辑,和数据库交互,比如 Student 类封装数据。
- View(视图):负责展示数据,比如 JSP、Thymeleaf 页面。
- Controller(控制器):接收请求,调用 Model 处理,再把结果返回给 View。
- 流程:
1. 用户发请求(比如浏览器输入 URL)。
2. DispatcherServlet(前端控制器)接收请求,找到对应的 Controller。
3. Controller 调用 Model 处理业务(比如查数据库)。
4. Model 返回结果,Controller 选择 View 渲染数据,返回给用户。
六、面试流程(结合技术)
- 候选人流程:
1. 候选人去面试,HR 接待。
2. HR 负责多部门协调,把简历发给对应部门领导。
3. 部门领导让下属去面试。
4. 面试官把结果告诉部门领导,领导再反馈给 HR,HR 通知候选人。
- 技术映射:
- 候选人 → 用户
- HR → Controller(接收请求,分发任务)
- 部门领导 → model(处理业务逻辑,决定是否录用)
七、Maven 依赖下载与导入
- 区分下载和导入:
- 导入:每次用都要导入(比如在 IDEA 中 add as library)。
- 下载:下一次,之后能用,不用再下(Maven 会把依赖下到本地仓库)。
- 下载失败解决办法:
1. 设置国内源:比如阿里云 Maven 镜像,在 IDEA 的 Settings → Build, Execution, Deployment → Build Tools → Maven → 配置文件里改。
2. 多次刷新 Maven:点击 IDEA 中 Maven 面板的刷新按钮。
3. 切换网络:比如手机热点、其他 Wi-Fi,避免网络拦截。
4. 删除已下载的,重新刷新 Maven:去本地仓库(比如 C:\Users\用户名\.m2\repository )删对应依赖文件夹,再刷新。
5. 确认版本存在:去 Maven 中央仓库(https://mvnrepository.com/)查依赖版本是否存在,不存在就换版本。
6. 切换默认中央仓库:在 Maven 的 settings.xml 里配置其他仓库地址。
八、SpringBoot 项目创建(专业版 vs 社区版)
- 专业版(Ultimate):
- 可直接创建 SpringBoot 项目,不用装插件。
- 能直接联网。
- 社区版(Community):
- 要装 SpringBoot 插件。
- 创建项目后专业版能直接跑,社区版可能要手动删 spring-boot-starter-web 依赖后的 release 后缀(图中提到)。
- 其他方式:也能用 Spring Initializr(https://start.spring.io/)官网创建项目,导入 IDEA,社区版没装插件也能开发,只是创建项目麻烦。
九、URL 与 Controller 映射
- URL 结构: http://IP:端口/资源路径?查询字符串 。比如 http://127.0.0.1:8080/hello , 127.0.0.1 是 IP, 8080 是端口, /hello 是资源路径。
- Controller 示例:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello Spring Boot!";
}
}
- @RestController :标记这是个 REST 风格的 Controller,返回 JSON 等数据。
- @GetMapping("/hello") :映射 GET 请求到 /hello 路径,方法返回字符串给客户端。
十、Tomcat 与 SpringBoot 的关系
- Tomcat 是 SpringBoot 的“内置管家”:SpringBoot 内置了 Tomcat,启动 SpringBoot 项目就会启动内置 Tomcat,默认端口 8080(图中举例 12306 是自定义端口)。
- Tomcat 不止能跑 SpringBoot:还能跑 Struts、Servlet 等项目。
- SpringBoot 不只能用 Tomcat:还能切换成 Jetty、Undertow 等 Web 服务器。
- 启动 SpringBoot 项目 ≈ 启动 Tomcat:SpringBoot 项目跑起来,内置 Tomcat 就启动了,能处理 Web 请求。
总结
本节从 Tomcat 基础、HTTP 状态码、Spring 家族关系、SpringMVC 流程、Maven 依赖、SpringBoot 项目创建、URL 映射到 Tomcat 与 SpringBoot 的关系,把 Java Web 开发的核心知识点串了起来。理解这些内容,能帮你打通从请求到响应的全链路,应对开发和面试中的问题。