详解Spring MVC

目录

1.什么是Spring Web MVC

MVC定义

2.学习Spring MVC

建立连接

@RequestMapping 注解介绍及使用

获取单个参数

 获取多个参数

获取普通对象

 获取JSON对象

获取基础URL参数

获取上传文件

获取Header

获取Cookie

获取Session

总结


1.什么是Spring Web MVC

官⽅对于 Spring MVC 的描述是这样

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, )Spring Web MVC),

comes from the name of its source module (spring-webmvc)

翻译为中⽂: 

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架 ,从⼀开始就包含在 Spring 框架中。 它的正式名称“ Spring Web MVC”来⾃其源模块的名称(Spring-webmvc) ,但它通常被称为Spring MVC).

从上述定义我们可以得出⼀个信息:

Spring Web MVC 是⼀个 Web 框架. 下⾯咱们简称之为: Spring MVC

MVC定义

MVC Model View Controller 的缩写 ,它是软件⼯程中的⼀种软件架构设计模式 ,它把软件系统分 为模型、视图和控制器三个基本部分

•  View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互 ,展⽰数据的资源.

•  Model(模型) 是应⽤程序的主体部分 ,⽤来处理程序中数据逻辑的部分.

•  Controller(控制器)可以理解为⼀个分发器 ,⽤来决定对于视图发来的请求 ,需要⽤哪⼀个模型来处理 ,以及处理完后需要跳回到哪⼀个视图。即 ⽤来连接视图和模型

2.学习Spring MVC

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后 ,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应.

咱们学习Spring MVC, 重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互. 

主要分以下三个⽅⾯:

1.  建⽴连接:将⽤⼾ (浏览器)和 Java 程序连接起来 ,也就是访问⼀个地址能够调⽤到我们的 Spring 程序。

2.  请求: ⽤⼾请求的时候会带⼀些参数 ,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数 的功能.

3.  响应: 执⾏了业务逻辑之后 ,要把程序执⾏的结果返回给⽤⼾ , 也就是响应.

建立连接

在 Spring MVC 中使⽤@RequestMapping来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤

创建⼀个 UserController  ,实现⽤户通过浏览器和程序的交互 ,具体实现代码如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/Romised")
public class BlogController {
    @RequestMapping("/sayHello")
    public String sayHello(){
        return "hello";
    }
}

 接下来访问:http://127.0.0.1:8080/Romised/sayHello 就可以看到程序返回的数据了

代码中为什么要加上@RestController?

因为没有这个注解的话@RequestMapping注解无法被扫描到,无法进行正确的路由映射,@RestController是 @Controller 和 @ResponseBody 的组合,@Controller 注解用于标识一个类是控制器类,用于处理 Web 请求并协调视图和模型之间的交互,@ResponseBody 注解的主要作用是指示方法的返回值直接作为 HTTP 响应体返回给客户端(返回的是数据)

⼀个项⽬中, 会有很多类, 每个类可能有很多的⽅法, Spring程序怎么知道要执⾏哪个⽅法呢?

Spring会对所有的类进⾏扫描, 如果类加了注解@RestController, Spring才会去看这个类⾥⾯的⽅法有没有加@RequestMapping这个注解

@RequestMapping 注解介绍及使用

@RequestMapping是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀ ,它是⽤来注册接⼝

路由映射的

收到请求时, 路径为/sayHello 的请求就会调⽤ sayHello这个⽅法的代码.

路由映射:

当用户访问⼀个 URL , 将用户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.

@RequestMapping的使用:

@RequestMapping可修饰类也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类路径 + 法路径

@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息 

@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息

  @RequestMapping  GET 还是 POST 请求?

本身并不限定是 GET 还是 POST 请求。它主要是用于定义请求的路径映射,通过结合不同的 HTTP 方法(如 @GetMapping 对应 GET 请求,@PostMapping 对应 POST 请求等)来具体指定该映射路径所支持的请求方式。可以与多种 HTTP 方法配合来处理不同类型的请求。

@Controller
public class MyController {

    @RequestMapping(value = "/Romised", method = RequestMethod.GET)
    public String getMethod() {
        return "result for GET";
    }

    @RequestMapping(value = "/Romised", method = RequestMethod.POST)
    public String postMethod() {
        return "result for POST";
    }
}

Spring MVC 参数获取

1.获取单个参数

@RestController
@RequestMapping("/Romised")
public class BlogController {
    @RequestMapping("/sayHello")
    public String sayHello(String name){
        return "hello!" + name;
    }
}

获取单个参数

注意说明:

1.代码中声明的参数名与请求地址栏中的参数名要完全一致,若不一致则无法获取到地址栏中对应的参数值,获取的为参数的默认值。

2.如果想明确指定请求中的参数要绑定到方法的参数,可以在方法的参数前加上@RequestParam注解进行参数重命名操作

 获取多个参数

@RestController
@RequestMapping("/Romised")
public class BlogController {
    @RequestMapping("/sayHello")
    public String sayHello(String name,String password){
        return "name:" + name + " password:" + password;
    }
}

获取多个参数注意说明:

1.进行参数匹配时,后端代码的参数名称要与地址栏中的参数名称要保证完全一致。

2.前后端进行参数匹配时,是以参数的名称进行匹配的,因此地址栏中的参数位置是不影响后端获取参数的结果

获取普通对象

创建实体类Person:

import lombok.Data;
@Data
public class Person {
   private Integer id;
   private String name;
}

 获取Person:

@RestController
@RequestMapping("/Romised")
public class BlogController {
    @RequestMapping("/sayHello")
    public Person sayHello(Person person){
        return person;
    }
}

 获取JSON对象

上述代码运行后获取JSON对象:发现获取不到JSON对象

在Spring MVC 中,提供了 @RequestBody 注解来实现接收 Json 对象的操作。代码如下: 

@RestController
@RequestMapping("/Romised")
public class BlogController {
    @RequestMapping("/sayHello")
    public Person sayHello(@RequestBody Person person){
        return person;
    }
}

获取基础URL参数

代码示例:

@RestController
@RequestMapping("/Romised")
public class BlogController {
    @RequestMapping("/sayHello/{name}/{password}")
    public String sayHello(@PathVariable(value = "name") String name,@PathVariable String password){
        return "name:" + name + " password:" + password ;
    }
}

获取基础URL参数注意说明:

使用@PathVariable 进行参数匹配时,后端代码的参数名称要与地址栏中的参数名称要保证一致且其对应的参数值要对应。

获取上传文件

代码示例:注意@RequestPart中的文件名和上传的要一致

@RestController
@RequestMapping("/fileTest")
public class BlogController {
    @RequestMapping("file")
    public String file(@RequestPart("Kun") MultipartFile file) throws IOException {
        System.out.println(file.getOriginalFilename());
        file.transferTo(new File("D:/BlogTest/" + file.getOriginalFilename()));
        return "success";
    }
}

上传文件成功!

注意:在new File的时候不要把路径写死,这样就可以上传多个文件不会覆盖

获取Header

获取Header的操作代码:

@RestController
@RequestMapping("/Romised")
public class BlogController {
    @RequestMapping("/getHeader")
    public String getHeader(HttpServletRequest request) {
        String userAgent = request.getHeader("User-Agent");
        return "userAgent:" + userAgent;
    }
}

在地址栏输入URL后,使用FIddler进行抓包操作获取请求的相关信息和响应信息

注意:

使用@RequestHeader 注解进行获取Header中的参数操作,该注解里的参数的参数名要与Header里面的参数名要一致

获取Cookie

首先在Chrome浏览器中打开开发者工具设置Cookie

 代码示例:

@RestController
@RequestMapping("/Romised")
public class BlogController {
    @RequestMapping("/getCookie")
    public String getCookie2(@CookieValue String kun,@CookieValue String romised){
        return "cookie存取的值kun:"+kun+",romised:"+romised;
    }
}

获取Session

获取Session的操作代码:

    @RequestMapping("/setSession")
    public String setSession(HttpServletRequest request){
        HttpSession session = request.getSession();
        session.setAttribute("username","Romised");
        return "success";
    }
    @RequestMapping("/getSession")
    public String getSession(HttpServletRequest request){
        HttpSession session = request.getSession(false);
        if (session!=null){
            String username = (String)session.getAttribute("username");
            return "登录用户:"+username;
        }
        return "session 为空";
    }
    @RequestMapping("/getSession2")
    public String getSession2(@SessionAttribute(required = false) String username){
        return "username:"+username;
    }
    @RequestMapping("/getSession3")
    public String getSession3(HttpSession session){
        String username = (String)session.getAttribute("username");
        return "登录用户:"+username;
    }

首先先设置session,然后可以通过三个方法获取session

总结

学习Spring MVC, 其实就是学习各种Web开发需要的注解

@RequestMapping: 路由映射

@RequestParam: 后端参数重命名

@RequestBody: 接收JSON类型的参数

@PathVariable: 接收路径参数

@RequestPart: 上传⽂件

@ResponseBody: 返回数据

@CookieValue: Cookie中获取值

@SessionAttribute: Session中获取值

@RequestHeader: Header中获取值

@Controller: 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交Spring管理. 默认返回视图.

RestController: @ResponseBody + @Controller 返回数据

Cookie Session都是会话机制, Cookie是客户端机制, Session是服务端机制.二通过SessionId 来关联. Spring MVC内置HttpServletRequest, HttpServletResponse两个对象. 需要使⽤时, 直接在方法中添加对应参数即可, CookieSession可以从HttpServletRequest中来获取, 也可以直接使用HttpServletResponse设置Http响应状态码.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654957.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生成式AI模型大PK——GPT-4、Claude 2.1和Claude 3.0 Opus

RAG(检索增强生成)系统的新评估似乎每天都在发布,其中许多都集中在有关框架的检索阶段。然而,生成方面——模型如何合成和表达这些检索到的信息,在实践中可能具有同等甚至更大的意义。许多实际应用中的案例证明,系统不仅仅要求从上…

《征服数据结构》目录

我们知道要想学好算法,必须熟练掌握数据结构,数据结构常见的有 8 大类,分别是数组,链表,队列,栈,散列表,树,堆,图。但如果细分的话就比较多了,比如…

华为WLAN实验继续-2,多个AP如何部署

----------------------------------------如果添加新的AP,如何实现多AP的服务----------- 新增加一个AP2启动之后发现无法获得IP地址 在AP2上查看其MAC地址,并与将其加入到AC中去 打开AC,将AP2的MAC加入到AC中 sys Enter system view, re…

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测

手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测 请问如果说到电纸书,你的认知还只是Kindle吗?然而遗憾的是,Kindle亦是过去,智能才是未来。 哈喽小伙伴们好,我是Stark-C~&#x…

【机器学习】【深度学习】批量归一化(Batch Normalization)

概念简介 归一化指的是将数据缩放到一个固定范围内,通常是 [0, 1],而标准化是使得数据符合标准正态分布。归一化的作用是使不同特征具有相同的尺度,从而使模型训练更加稳定和快速,尤其是对于使用梯度下降法的算法。而标准化的作用…

Python自动化办公Excel数据处理实战指南

目录 一、引言 二、需求分析 三、技术选型 四、实战操作 数据读取 数据清洗 数据分析 数据输出 五、学习资源推荐: 六、结语 一、引言 在现代办公环境中,Excel数据处理是一项不可或缺的技能。然而,当数据量庞大、处理流程复杂时&a…

Nocobase快速上手 -第一个collection

本文记录Nocobase中如何创建collection,以及如何将collection展示到页面中,并且配置CRUD相应的操作. Collection 在NocoBase中,collection(集合)是用来组织和存储各种数据的容器,如订单、产品、用户、评论…

【算法】位运算算法——判断字符是否唯一

题解:判断字符是否唯一(位运算算法) 目录 1.题目2.题解3.位图参考代码4.细节5.总结 1.题目 题目链接:LINK 2.题解 题解有两种方法, 一是做一个哈希数组,去查重; 二是直接用一个变量每一位来对应表示是否有这个字母…

《QT实用小工具·六十七》QTabWidget实现的炫酷标签工具栏

1、概述 源码放在文章末尾 该项目基于QTabWidget和QTabBar实现了灵活的标签工具栏,主要包含如下功能: 1、标签栏可以收起,可以展开 2、可以在标签栏中添加新的标签界面 3、可以从标签工具栏中把界面拖出来,也可以拖回去 4、关闭拖…

【音视频基础概念】颜色与图像

文章目录 前言一、三原色不同三原色的概念三原色的作用 二、颜色空间颜色空间是什么颜色空间的作用常见颜色空间示例灰度图像是什么灰度图像的作用灰度图像的技术细节示例 总结 前言 在当今数字媒体时代,音视频技术在我们的日常生活中占据了重要位置。无论是观看电…

【Numpy】深入解析numpy.mat()函数

numpy.mat():深入探索NumPy中的矩阵类 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓 博主简…

鸿蒙OS开发:【一次开发,多端部署】(导航栏) 导航栏

一多导航栏 介绍 本示例展示了导航组件在不同设备形态下的样式。 在sm设备上,以tabs形式展示,内容、导航为上下样式布局,通过点击底部tabs切换内容;在md/lg设备上,以[SideBarContainer]形式展示,内容、导…

爷爷看了都会,打工人必备的摸鱼AI神器!免费!

去年,AI技术无疑成为了最为引人注目的焦点,层出不穷的创新应用令人目不暇接。尽管许多人对这股AI热潮的持久性持怀疑态度,但现实却用事实给予了最有力的反驳。AI所展现出的强大生产力,足以令人刮目相看。 而今年以来,…

鸿蒙大厂目前政策变现沉淀思考

鸿蒙引擎定制优化 鸿蒙端hotfix: 技术栈太大了,但是鸿蒙需要学习什么呢? 什么最有价值? 这就是接下来需要表达下我的观点: 1、APP开发 2、应用市场技术专员 【游戏、电商重型APP性能的处理 SmartPerf、构建自己的工…

Marvelous Designer12 解锁版安装教程 (3D服装设计软件)

前言 Marvelous Designer允许您使用我们的尖端设计软件创建美丽的3D虚拟服装。最后,使用工具在提高质量的同时节省时间,为您的设计注入活力。从基本衬衫到复杂的褶皱连衣裙和粗糙的制服,Marvelous Designer几乎可以将织物纹理和物理特性复制…

Flink系列一:flink光速入门 (^_^)

引入 spark和flink的区别:在上一个spark专栏中我们了解了spark对数据的处理方式,在 Spark 生态体系中,对于批处理和流处理采用了不同的技术框架,批处理由 Spark-core,SparkSQL 实现,流处理由 Spark Streaming 实现&am…

Apache-Doris单机部署

参考: 快速体验 Apache Doris - Apache Doris 1、Apache Doris是一款 基于MPP架构的高性能、实时的分析型数据库,以高效、简单、统一的特点被人们所熟知,仅需 亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点…

内存泄漏面面谈

概述 主要介绍了内存泄漏的关注点是对象,对内存问题进行了分类并且确定本文关注点是内存泄漏,15种内存泄漏判断方式,hprof文件的用法和分析过程,以及memory profiler工具一些基本概念,最后提到了如何触发内存泄漏问题…

C# 读取 CSV 文件的方法汇总

文章目录 1. 使用System.IO命名空间中的类2. 处理标题行和指定列3. 使用CsvHelper库4. 高级功能和异常处理5. 使用 LINQ6. 总结 CSV(Comma-Separated Values,逗号分隔值)文件是一种简单的文本文件格式,用于存储表格数据。在C#中&a…