代码改变世界

Spring MVC6 - 实践

2025-09-16 19:24  tlnshuju  阅读(9)  评论(0)    收藏  举报

分层详细解释和关键代码/伪代码提取:就是本文章围绕 Java Web 开发(Spring、Spring MVC、前后端交互、MVC 思想、Session/Cookie 机制) 展开,以下

一、项目分层与代码规范

1. 三层架构(表现层、业务逻辑层、数据层)

- 表现层(Controller):接收用户请求,返回结果(如页面、JSON 内容)。

- 业务逻辑层(Service):对材料进行加工、处理业务规则(比如登录验证、订单计算)。

- 数据层(DAO):负责素材存储与管理(如执行数据库增删改查)。

2. 代码结构与命名

- 包结构: controller (表现层)、 service (业务层)、 dao (数据层)、 util (设备类,通常是静态方法)、 entity (实体类,对应数据库表或业务模型,也叫 model / pojo / VO / DTO 等)。

- 命名规范:类名用大驼峰(如 UserController 、 BookService );变量/方法名用小驼峰(如 userName 、 getBookList() )。

二、Spring 核心思想(IoC、AOP)

- IoC(控制反转):

- 原本对象的创建、生命周期(如创建、销毁)由开发者手动控制;IoC 后,由 Spring 容器统一管理(“控制权反转”给 Spring)。

- Spring 容器是“对象工厂”,负责创建、存储、供应对象(这些对象称为 Bean ,注意:Spring 的 Bean 不等同于 Java Bean,范围更宽泛)。

- AOP(面向切面编程):(图中未详细展开,核心是“在不修改原有代码的情况下,给方法添加统一功能”,如日志、事务)。

三、前后端交互与 Session/Cookie 机制

1. 前后端分离 vs 课堂项目

- 前后端分离:前端(如 Vue/React)和后端(如 Spring Boot)是独立项目,通过接口(API)交互,前端部署在静态服务器,后端部署在应用服务器。

- 课堂项目:逻辑上前后端职责分离,但物理上可能打包在一起(比如前端页面放在 Spring Boot 的 resources/static 里)。

2. Session & Cookie 工作流程(用户会话跟踪)

以“用户登录后保持登录状态”为例:

1. 客户端发送首次请求(如登录请求)。

2. 服务器创建 HttpSession (存用户登录信息),并生成 sessionId ,通过 Set-Cookie 响应头把 sessionId 传给客户端。

3. 客户端收到 Set-Cookie 后,把 sessionId 存到 Cookie 里。

4. 客户端后续请求时,会自动携带 Cookie(含有 sessionId )。

5. 服务器通过 sessionId 查找对应的 HttpSession :

- 找到:说明是“同一个用户”,继续业务管理(如获取用户信息)。

- 没找到:创建新的 HttpSession ,并再次通过 Set-Cookie 把新 sessionId 给客户端。

四、MVC 思想与 Spring MVC

“模型(Model)-视图(View)-控制器(Controller)”的设计思想,分离信息、页面、业务逻辑。就是- MVC:

- Spring MVC:Spring 对 MVC 思想的实现,核心是“让 Controller 接收请求,调用 Service 处理业务,最后返回视图或素材”。

五、接口示例与代码提取

1. 图书列表接口( GET /book/getList )

- 请求:无参数。

- 响应:返回图书列表(JSON 格式),示例数据:

json

[

{

"id": 1,

"bookName": "活着",

"author": "余华",

"count": 270,

"price": 20,

"publish": "北京文艺出版社",

"status": 1,

"statusCN": "可借阅"

}

// 更多图书...

]

- 后端 Spring MVC 代码(伪代码):

java

@RestController

@RequestMapping("/book")

public class BookController {

@Autowired

private BookService bookService;

@GetMapping("/getList")

public List<Book> getBookList() {

return bookService.listAllBooks();

}

}

// BookService 接口与实现(略,负责调用 DAO 查数据库)

// Book 实体类(略,对应上述 JSON 字段)

2. 登录接口( POST /user/login )

- 请求参数: name=admin&password=admin (表单格式)。

- 响应: true (登录成功)或 false (登录失败)。

- 后端 Spring MVC 代码(伪代码):

java

@RestController

@RequestMapping("/user")

public class UserController {

@PostMapping("/login")

public Boolean login(String name, String password, HttpSession session) {

// 验证用户名密码(示例:硬编码 admin/admin)

boolean isSuccess = "admin".equals(name) && "admin".equals(password);

if (isSuccess) {

session.setAttribute("loginUser", name); // 登录成功,存用户到 Session

}

return isSuccess;

}

}

这些内容覆盖了 Java Web 开发从“架构分层”到“框架核心思想”再到“具体接口达成”的关键知识点~