Spring MVC 中的常用注解和用法

news2024/12/22 19:41:53

目录

一、什么是 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 对象就创建⼀个
session
 HttpSession 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.coloradmin.cn/o/1317269.html

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

相关文章

css 使用flex 完成瀑布流布局

瀑布流布局在商城类、文章类 app、网页中都是常用的&#xff0c;使用这样的形式&#xff0c;能过让整个页面更加的活波&#xff0c;也能让图片根据实际的大小来显示&#xff0c;更好的展示图片内容。那么代码如何实现呢 实现的效果 代码 <template><view class"…

【Python节日系列】慢慢画一棵粉红色的圣诞树(完整代码)

写在前面 本期内容:慢慢画一棵粉红色的圣诞树,圣诞节快乐吖! 目录 目录 写在前面 目录 环境需求 粉红色圣诞树

谈谈spring中AOP

概述 在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架中…

尚硅谷JavaWeb电子书城项目(Java+Mysql+Tomcat+Jsp)

自己写的在线电子书城项目&#xff0c;可改写&#xff0c;添加功能&#xff0c;如打折&#xff0c;分类&#xff0c;用户管理&#xff0c;评论等功能。 使用方法&#xff1a; 1.使用idea导入项目。 2.数据库要用项目resource文件里的book.sql文件建立。 3.修改jdbc.properi…

Text2SQL学习整理(一) 综述

数据库由一张或多张表格构成&#xff0c;表格之间的关系通过共同的列&#xff08;外键&#xff09;关联&#xff0c;人们使用数据库来方便的记录和存储信息。SQL是广泛应用的关系型数据库查询语言&#xff0c;但是对于普通用户而言&#xff0c;编写SQL语句有一定的难度。 Text…

时序分解 | Matlab实现SSA-ICEEMDAN麻雀算法优化ICEEMDAN时间序列信号分解

时序分解 | Matlab实现SSA-ICEEMDAN麻雀算法优化ICEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现SSA-ICEEMDAN麻雀算法优化ICEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现SSA-ICEEMDAN麻雀算法优化ICEEMDAN时间序列信号分解 可…

【Linux】键盘高级操作技巧

命令行最为珍视的目标之一就是懒惰&#xff1a;用最少的击键次数来完成最多的工作。另一个目标是你的手指永 远不必离开键盘&#xff0c;永不触摸鼠标。因此&#xff0c;我们有必要了解一些键盘操作&#xff0c;使我们用起来更加的迅速和高效。 移动光标 在前面介绍过上下左右…

【Spring】之Ioc和Aop快速了解

这里写目录标题 1.Spring框架是什么&#xff1f;简介&#xff1a;总结&#xff1a;Spring框架&#xff0c;可以理解为是一个管理者&#xff1a;管理整个分层架构&#xff08;MVC&#xff09;中的每一个对象&#xff1b;&#xff08;每一个对象称之为bean&#xff09; 2.Spring框…

Kubernetes技术与架构-调度 1

Kubernetes技术与架构集群对Pod的资源调度策略分为三个部分&#xff0c;其中包括匹配调度、优先调度以及终止调度&#xff0c;匹配调度是指将Pod匹配到适合、指定的Node服务器节点中运行&#xff0c;优先调度是指终止优先级低的Pod而优先匹配优先级高的Pod到适合的Node服务器节…

通过阿里云服务器实现访问自己的网站,域名绑定教程

人的梦想&#xff0c;永远不会结束&#xff01;——黑胡子 请把那把刀给我吧&#xff01;我要会连她的份也一起努力的&#xff0c;我要成为世界第一的大剑客&#xff0c;我要让我的名字&#xff0c;响彻天堂&#xff01;——索隆 准备&#xff1a;服务器&#xff0c;域名&…

双指针训练

1.原理 双指针是一种解题常用方法&#xff0c;常用于将数组按照某种要求进行分块/划分&#xff0c;这里的指针对于数组来说&#xff0c;可以替换成下标&#xff08;毕竟使用下标实际上就是用了指针&#xff09;。 1.1.划分区间 通常将这两个指针命名位dest/cur&#xff08;或…

求Top K问题

1.大小根堆解决Top k问题 传统思想&#xff1a;是将容器中的数据进行排序&#xff0c;排序的时间复杂度最差像冒泡是O(n^2),最好像快排是O(nlogn)。 如何在线性时间内O(n)找到Top K的元素呢? 相当于将原始序列遍历一遍就可以找到相应的元素&#xff0c;其实也没有必要将所有…

C语言之函数式宏

目录 函数和数据类型 函数式宏 函数和函数式宏 函数式宏和对象式宏 不带参数的函数式宏 函数式宏和逗号运算符 函数式宏和函数类似并且比函数更加灵活&#xff0c;下面我们就来学习函数式宏的相关内容。 函数和数据类型 我们来编写一个程序&#xff0c;它能计算出所读取…

python蓝桥杯的回形取数

#来源于蓝桥杯的训练 题号是用户登录https://www.lanqiao.cn/problems/1517/learning/?page1&first_category_id1&problem_id1517 根据题目描述可以知道&#xff0c;我们传入的是一个矩阵。 在这里我们使用列表来实现矩阵。 那么&#xff0c;我们直接看代码 dir …

超详细 | 黏菌算法原理、实现及其改进与利用(Matlab/Python)

测试函数为F15 在MATLAB中执行程序结果如下&#xff1a; 在Python中执行程序结果如下&#xff1a; 众所周知&#xff0c;麻雀搜索算法SSA是2020年由东华大学沈波教授团队提出[1]的一种性能十分优异的优化算法&#xff0c;而最近作者发现&#xff0c;在2020年还提出了一个优…

腾讯云:AI云探索之路

随着科技的飞速发展&#xff0c;人工智能(AI)云计算领域日益显现出其巨大的潜力和价值。在这个充满挑战和机遇的领域&#xff0c;腾讯云凭借其卓越的技术和创新能力&#xff0c;取得了令人瞩目的成果。本文将深入探讨腾讯云在AI云计算领域的优势&#xff0c;以及其为人工智能发…

Post Json数据与Form表单数据转换器

具体请访问&#xff1a;在线Json转Form表单参数工具

python绘制gif动图--避免收费拒绝水印

在cp源码解读-CSDN博客文章浏览阅读341次,点赞4次,收藏6次。coreutils:cp源代码分析https://blog.csdn.net/zhaiminlove/article/details/135026160中为了直观的表达文件是如何一步步的copy的,就想到了做一个gif,但是从来没弄过,一下有点麻爪了。 首先想到的是百度、Goog…

孩子都能学会的FPGA:第三十三课——用FPGA实现一个通用的SPI主机接收模块

&#xff08;原创声明&#xff1a;该文是作者的原创&#xff0c;面向对象是FPGA入门者&#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门&#xff0c;作者不光让大家知其然&#xff0c;还要让大家知其所以然&#xff01;每个工程作者都搭建了全自动化的仿…

C语言指针4

1. #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>int main() {int a 10;int* p &a;//一级指针int** pp &p;//二级指针return 0; }上述代码中p的类型是int* pp的类型是int** 2.int* arr[5]; 数组arr的每个元素是整形指针 3.定义一个变量时,去掉变…