前言:在现代 Java Web 开发中,Spring Web MVC 是一个不可或缺的重要组成部分。它为开发人员提供了强大而灵活的 Web 开发框架,使得构建 RESTful 接口和处理用户请求变得轻松而高效。
✨✨✨这里是秋刀鱼不做梦的BLOG
✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客
在正式开始讲解之前,先让我们看一下本文大致的讲解内容:
目录
1.Spring Web MVC简介
在开始学习Spring Web MVC中的一些操作之前,想让我们了解一下什么是Spring Web MVC,以下为Spring Web MVC的简介:
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,是 Spring 框架的一部分,它遵循 MVC(Model-View-Controller)设计模式,其将业务逻辑、界面显示与请求处理解耦,从而提高了系统的可维护性和扩展性。
我相信对于第一次接触Spring Web MVC的读者来说,即使看来上面的Spring Web MVC简介,也是无法理解到底什么是Spring Web MVC的,其实一言以蔽之,Spring Web MVC就是——Spring中关于Web相关的操作。
我们从上面的简介中,我们可以了解到Spring Web MVC其遵循MVC,那么MVC又是什么呢?
——MVC 其实是 Model View Controller 的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分:
-
Model(模型):负责处理业务逻辑和数据管理,是应用的核心。
-
View(视图):负责与用户交互,展示数据。
-
Controller(控制器):作为中介,接收视图请求,调用模型处理数据,再将结果返回视图。
——这样我们就了解了 MVC 是什么了!
2.建立连接
Spring MVC 提供了强大的注解机制来实现 URL 与方法之间的映射,其中最核心的就是 @RequestMapping,其功能为:
可以用于类或方法上,类上的路径作为前缀,方法上的路径作为具体路由。
支持设置多个 URL 路径。
可限制请求方法类型(GET、POST、PUT、DELETE 等)。
这里我们使用一个例子来帮助你更好的理解:
@RestController
@RequestMapping("/api")
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "Hello Spring MVC!";
}
}
解释说明:
@RestController
:表示这是一个 REST 控制器,返回值会直接作为 HTTP 响应。
@RequestMapping("/api")
:给控制器定义统一的路径前缀。
@GetMapping("/hello")
:表示这个方法处理 GET 请求,完整路径为/api/hello
。
这样我们就知道了在Spring Web MVC中如何建立路径映射了!
3.请求参数处理
从上面我们知道,我们可以使用@RequestMapping 注解来进行路径的映射,但是有时候我们可能会在请求的路径中传递参数,那么我们又该如何去处理传递的参数呢?
【1】单个参数
@GetMapping("/sayHi")
public String sayHi(String name) {
return "Hi, " + name;
}
——解释:对于单个参数,我们直接使用变量进行接收即可。
【2】多个参数 / 对象参数
@PostMapping("/user")
public String addUser(User user) {
return "Added: " + user.getName();
}
——解释:当前端传入多个字段时,Spring 会自动将它们绑定到一个类中,无需使用注解。
【3】参数重命名
@GetMapping("/search")
public String search(@RequestParam("q") String keyword) {
return "Search for: " + keyword;
}
——解释:当前端传的参数名为 q
,但方法中使用 keyword
,我们就可以通过 @RequestParam("q")
进行对参数重命名。
【4】数组与集合参数
@GetMapping("/ids")
public String getIds(@RequestParam List<Integer> ids) {
return "IDs: " + ids;
}
——解释:当接收 URL 中有多个相同参数名组成的列表,我们使用@RequestParam,其就会将它们组装成List<Integer>自动注入
【5】JSON 请求体
@PostMapping("/save")
public String save(@RequestBody User user) {
return "Saved: " + user.getName();
}
——解释:当要接收JSON格式的数据的时候,我们直接使用@RequestBody注释即可。
【6】URL 路径参数
@GetMapping("/user/{id}")
public String getUser(@PathVariable Integer id) {
return "User ID: " + id;
}
——解释:如果是在路径中的参数,我们使用@PathVariable注释就可以对其进行注入。
【7】文件
@PostMapping("/upload")
public String upload(@RequestPart MultipartFile file) {
return "File: " + file.getOriginalFilename();
}
——解释:对于处理上传的文件(如图片、文档),我们可以使用MultipartFile 类来进行接收,并搭配使用@RequestPart注解即可。
以上就是对于参数的处理了!
4.会话管理
我们在处理请求之后,下一步往往要维护用户状态,比如登录信息、偏好设置等,而Spring MVC 提供了对 Cookie 和 Session 的全面支持,帮助我们轻松实现会话控制。
(1)Cookie 操作
Cookie 是保存在客户端浏览器中的键值对,可用于标识用户身份、存储偏好配置等,传统方式是通过HttpServletRequest获取:
@GetMapping("/getCookie")
public String getCookie(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("token".equals(cookie.getName())) {
return "Token: " + cookie.getValue();
}
}
}
return "No token found.";
}
当然Spring 也提供了更简洁的 @CookieValue
注解:
@GetMapping("/checkToken")
public String checkToken(@CookieValue(value = "token", defaultValue = "none") String token) {
return "Received token: " + token;
}
(2)Session 操作
Session 是保存在服务端的对象,传统方式是通过HttpSession进行获取:
@GetMapping("/setSession")
public String setSession(HttpSession session) {
session.setAttribute("username", "admin");
return "Session set.";
}
@GetMapping("/getSession")
public String getSession(HttpSession session) {
Object user = session.getAttribute("username");
return "User in session: " + user;
}
当然也可用 @SessionAttribute
简化访问:
@GetMapping("/userInfo")
public String getUser(@SessionAttribute("username") String username) {
return "Session user: " + username;
}
——通过 Session 和 Cookie,我们便能实现完整的登录态保持与用户数据追踪!
5.请求头处理
有时候我们需要获取请求头(Header)信息,比如用户代理、认证信息、内容类型等,而Spring 同样提供了传统与注解两种方式:
传统方式:
@GetMapping("/headerInfo")
public String getHeader(HttpServletRequest request) {
String ua = request.getHeader("User-Agent");
return "User-Agent: " + ua;
}
——我们直接通过HttpServletRequest进行get即可。
传统方式:
@GetMapping("/headerCheck")
public String getHeader(@RequestHeader("User-Agent") String userAgent) {
return "Browser: " + userAgent;
}
——使用@RequestHeader进行注入。
获取请求头能让我们做出更个性化的响应,比如根据设备类型返回不同内容,以上就是有关请求头的内容了!
以上就是本篇文章的全部内容了~~~