Spring MVC 中的常用注解和用法

目录

一、什么是 Spring MVC

二、MVC定义 

 三、简述 SpringMVC 起到的作用有哪些?

 四、注解

 五、请求转发或请求重定向


一、什么是 Spring MVC

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。
从上述定义我们可以得出两个关键信息:
1. Spring MVC 是⼀个 Web 框架。
2. Spring MVC 是基于 Servlet API 构建的。

二、MVC定义 

MVC 是 Model View Controller 的缩写,它是软件工程中的⼀种软件架构模式,它把软件系统分 为模型、视图和控制器三个基本部分。
  • Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据 库中存取数据。
  • View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据, 控制用户输入,并向模型发送数据。
MVC 和 Spring MVC 的关系:
MVC 是⼀种思想,而 Spring MVC 是对 MVC 思想的具体实现。
总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web 框架,那么当用户在浏览器中输入了 url 之后,我们的 Spring MVC 项目就可以感知到用户的请求。

 三、简述 SpringMVC 起到的作用有哪些?

SpringMVC 是一个 Spring 内置的 MVC 框架,使用它可以开发出 RESTful 接口,为网站或手机 APP 提供接口支持,并且它可以轻松的解决 WEB 开发中常见的问题,如参数接收、文件上传、表单验证、国际化等等,且使用简单。

 四、注解

@RequestMapping:支持 GET/POST 类型的请求。

@GetMapping:支持 GET 类型的请求。

@PostMapping:支持 POST 类型的请求。

@ResponseBody:返回非静态 HTML 页面数据。

@RequestParam:接收前端参数。

@RequestBody:接收 JSON 对象参数。


@PathVariable  :获取URL中参数

例子:
@PostMapping("/m6/{name}/{password}")
public Object method_6(@PathVariable String name, @PathVariable String pass
word) {System.out.println("name:" + name);System.out.println("password:" + password);return "redirect:/index.html";
}
注意事项:@PostMapping("/m6/{name}/{password}") 中的 {password} 参数不能省略。

@RequestPart:获取上传的文件。

@RequestMapping("/param9")
public String param9(String name, @RequestPart("myfile") MultipartFile fil
e) throws IOException {// 获取⽂件后缀名String fileName = file.getOriginalFilename().substring(file.getOrigina
lFilename().lastIndexOf("."));// ⽂件保存地址String filePath = ClassUtils.getDefaultClassLoader().getResource("stat
ic").getPath() +"/" + UUID.randomUUID() + fileName;// 保存⽂件file.transferTo(new File(filePath));return filePath + " 上传成功.";
}

获取项目目录的几种方式:

ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX).getPath();
new ClassPathResource("").getFile().getAbsolutePath();
ClassUtils.getDefaultClassLoader().getResource("").getPath();
ResourceUtils.getFile("classpath:static/").getPath();

@CookieValue:获取 Cookie 信息。

@RequestHeader : 获取头部信息

传统获取 header/cookie
@RequestMapping("/param10")
@ResponseBody
public String param10(HttpServletResponse response, HttpServletRequest requ
est) {String name = request.getParameter("name");// 获取所有 cookie 信息Cookie[] cookies = request.getCookies();String userAgent = request.getHeader("User-Agent");return name + ":"+userAgent;
}
简洁的获取 Cookie—@CookieValue
@RequestMapping("/cookie")
@ResponseBody
public String cookie(@CookieValue("cookie") String cookie) {return "cookie:" + cookie;
}
简洁获取 Header—@RequestHeader
@RequestMapping("/header")
@ResponseBody
public String header(@RequestHeader("User-Agent") String userAgent) {return "userAgent:"+userAgent;
}

Session 存储和获取
Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的,如下代码所示:
@RequestMapping("/setsess")
@ResponseBody
public String setsess(HttpServletRequest request) {// 获取 HttpSession 对象,参数设置为 true 表示如果没有 session 对象就创建⼀个
sessionHttpSession session = request.getSession(true);if(session!=null){session.setAttribute("username","java");}return "session 存储成功";
}
读取 Session 可以使用 HttpServletRequest,如下代码所示:
@RequestMapping("/sess")
@ResponseBody
public String sess(HttpServletRequest request) {// 如果 session 不存在,不会⾃动创建HttpSession session = request.getSession(false);String username = "暂⽆";if(session!=null && session.getAttribute("username")!=null){username = (String) session.getAttribute("username");}return "username:"+username;
}
获取 Session 更简洁的方式 - @SessionAttribute :
@RequestMapping("/sess2")
@ResponseBody
public String sess2(@SessionAttribute(value = "username",required = false)
String username) {return "username:"+username;
}

 五、请求转发或请求重定向

forward - 请求转发 VS redirect - 请求重定向
请求转发和重定向的使用对比:
// 请求重定向
@RequestMapping("/index")
public String index(){return "redirect:/index.html";
}
// 请求转发
@RequestMapping("/index2")
public String index2(){return "forward:/index.html";
}
举例说明 forward 和 redirect:
forward(请求转发)和 redirect(请求重定向)的区别,举例来说,例如,你告诉你妈妈,你想吃辣 条,如果你妈妈,说好,我帮你去买,这就是 forward 请求转发;如果你妈妈让你自己去买,那么就是请求 redirect 重定向。

forward 和 redirect 具体区别如下:
1. 请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。
2. 请求重定向地址发生变化,请求转发地址不发生变化。
3. 请求重定向与直接访问新地址效果⼀样,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 如何进行全局异常处理

前 言 在SpringBoot的开发中,为了提高程序运行的鲁棒性,我们经常需要对各种程序异常进行处理,但是如果在每个出异常的地方进行单独处理的话,这会引入大量业务不相关的异常处理代码,增加了程序的耦合,同时未…

移动端Vant中的Calendar日历增加显示农历(节日、节气)功能

核心: 使用 js-calendar-converter 库实现 npm地址:js-calendar-converter 内部使用原生calendar.js, 中国农历(阴阳历)和西元阳历即公历互转JavaScript库,具体实现感兴趣的可自行查看其实现源码。 原日…

唱作歌手朱卫明的粤语版《兄弟情》:一曲深情唱尽人间真挚情感

朱卫明的粤语版《兄弟情》:一曲深情唱尽人间真挚情感 在音乐的广阔天地里,每种语言都有其独特的韵味和魅力。对于唱作音乐人朱卫明来说,他用普通话演唱的歌曲已经深入人心,但当他将《兄弟情》这首歌曲以粤语演绎时,更…

笔记 - 现代嵌入式芯片封装识读

0.引用: 配图、资料并非一处采集,我不太容易找到图片的原始链接。这里的图片仅作示例,无商业用途。如果涉及侵权,请随时联系。谢谢! PCB封装欣赏了解之旅(下篇)—— 常用集成电路_ufqfpn封装…

【C++】STL 容器 - string 字符串操作 ⑤ ( string 字符串查找 | find 函数查找字符串 | rfind 函数查找字符串 )

文章目录 一、string 字符查找 - find 函数查找字符串1、string 类 find 函数原型说明2、代码示例 - 字符串查找3、代码示例 - 统计字符串子串 二、string 字符查找 - rfind 函数查找字符串1、string 类 rfind 函数原型说明2、代码示例 - rfind 字符串查找 一、string 字符查找…

华为OD机试真题-英文输入法-2023年OD统一考试(C卷)

题目描述: 主管期望你来实现英文输入法单词联想功能。需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。 注意: 1. 英文单词联想时,区分大小写 2. 缩略形式…

探索大学专业和硕士专业的广阔领域

目录 大学专业分类 1. 自然科学和数学类专业 2. 工程与技术类专业 3. 医学与卫生类专业 4. 社会科学类专业 5. 人文学科类专业 6. 艺术与设计类专业 硕士专业分类 1. 工程管理与技术管理 2. 商业与管理 3. 计算机科学与信息技术 4. 医学与卫生管理 5. 社会科学与人…

注册与回调

C 再谈谈注册(本质是建立映射)与回调 在之前的博文中, 我们探讨过映射的重要作用, 请直接看:http://blog.csdn.net/stpeace/article/details/39452203, 在那篇文章中, 我们是用STL中的map来做的, map建立的是key-value…

rk3568 RGMII KSZ8795 MAC TO MAC

RK3568与KSZ8795交换机芯片连接,直接MAC TO MAC方式,这样一下就扩展会4路网口,应该场合比较多,移植过程如下: 参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》 《rockchip RGMIImv88e6390 管理型交换机功…

【Spring】之Ioc和Aop快速了解

这里写目录标题 1.Spring框架是什么?简介:总结:Spring框架,可以理解为是一个管理者:管理整个分层架构(MVC)中的每一个对象;(每一个对象称之为bean) 2.Spring框…

太空旅行:计算机技术的崭新航程

太空旅行:计算机技术的崭新航程 一、引言 自古以来,人类就对浩渺的宇宙充满了无尽的好奇和渴望。随着科技的飞速发展,太空旅行已经从科幻小说中的构想变为现实。在这个过程中,计算机技术起到了不可或缺的作用。从阿波罗时代的初…

​FL Studio2024最新版本好不好用?有哪些新功能

FL Studio2024版是一款在国内非常受欢迎的多功能音频处理软件,我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 2024版还为用户们准备了超多的音乐乐器伴奏,我们可以直接一键调取自己需要的音调。 FL Studio 2024版不仅拥…

HarmonyOS4.0从零开始的开发教程15HTTP数据请求

HarmonyOS(十三)HTTP数据请求 1 概述 日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富…

uniapp上传文件api如何使用

在uni-app中使用上传文件API有以下几个步骤&#xff1a; 创建 <input type"file"> 元素&#xff0c;并监听文件选择事件 <input type"file" change"chooseFile">在 methods 中定义 chooseFile 方法&#xff0c;处理文件选择事件 met…

发起POST请求时同时携带文件和自定义参数

目录 背景 说明 背景 发送请求时需要携带文件&#xff0c;又想携带自定义参数的场景。 说明 需要带文件&#xff0c;则Content-Type已经确定&#xff1a; Content-Type: multipart/form-data" 其次在form中设置自己的参数&#xff1a; -F a1 注意此时-d&#xff08…

MySQL进阶2 - 索引

MySQL进阶1 - 索引 1. 索引概述2. 索引结构2.1 二叉树2.2 B-Tree(多路平衡查找树)2.3 BTree2.4 Hash 3. 索引分类4. 索引语法5. SQL性能分析5.1 SQL执行频率5.2 慢查询日志5.3 profile5.4 explain执行计划5.3.1 EXPLAIN执行计划各字段含义&#xff1a; 6. 索引使…

SpringBoot+FastJson 优雅的过滤 Response Body

Spring 源码系列 1、Spring 学习之扩展点总结之后置处理器&#xff08;一&#xff09; 2、Spring 学习之扩展点总结之后置处理器&#xff08;二&#xff09; 3、Spring 学习之扩展点总结之自定义事件&#xff08;三&#xff09; 4、Spring 学习之扩展点总结之内置事件&#xf…

手把手教你Linux查找Java的安装目录并设置环境变量以及Linux下执行javac未找到命令的保姆级教学

查找Java的安装目录 输入 java -version&#xff0c;查看是否成功安装Java 输入 which java&#xff0c;查看Java的执行路径 输入 ls -lrt /usr/bin/java 输入 ls -lrt /etc/alternatives/java&#xff0c;/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64 就是J…

自动化测试(终章)webdriver的常用api(2)以及新的开始

目录 多层框架/窗口定位 多层框架的定位 frame是什么&#xff1f; 多层窗口定位 层级定位 使用 XPath 进行层级定位&#xff1a; 使用 CSS 选择器进行层级定位&#xff1a; 下拉框处理 alert、confirm、prompt 的处理 Alert 弹窗&#xff1a; Confirm 弹窗&#xff…

推免那些事

平生第一次搞推免&#xff0c;也是最后一次。错失了一些机会&#xff0c;也有幸获得了一些机会&#xff0c;值得祝庆&#xff0c;也值得反思。 以下记录为个人流水账。 个人背景 我的背景可以算不是非常好了&#xff0c;况且今年211受歧视比较严重。 学校&#xff1a;211&…