Spring MVC(如果想知道有关Spring MVC的知识,那么只看这一篇就足够了!)

        前言:在现代 Java Web 开发中,Spring Web MVC 是一个不可或缺的重要组成部分。它为开发人员提供了强大而灵活的 Web 开发框架,使得构建 RESTful 接口和处理用户请求变得轻松而高效。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

在正式开始讲解之前,先让我们看一下本文大致的讲解内容:

目录

1.Spring Web MVC简介

2.建立连接

3.请求参数处理

【1】单个参数

【2】多个参数 / 对象参数

【3】参数重命名

【4】数组与集合参数

【5】JSON 请求体

【6】URL 路径参数

【7】文件

4.会话管理

        (1)Cookie 操作

        (2)Session 操作

5.请求头处理


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进行注入。

        获取请求头能让我们做出更个性化的响应,比如根据设备类型返回不同内容,以上就是有关请求头的内容了!


以上就是本篇文章的全部内容了~~~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值