【Spring MVC】快速学习使用Spring MVC的注解及三层架构

news2024/11/25 16:23:30

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

💓 博客主页:从零开始的-CodeNinja之路

⏩ 收录文章:【Spring MVC】快速学习使用Spring MVC的注解及三层架构

🎉欢迎大家点赞👍评论📝收藏⭐文章

目录

  • Spring Web MVC
    • 一: 什么是Spring Web MVC?
    • 二:Spring MVC中常用注解的使用
        • 2.1 @RequestMapping:地址映射
        • 2.2 @RequestBody:请求正文
        • 2.3 @PathVariable:路径变量
        • 2.4 @RequestPart:上传文件
        • 2.5 @RequestParam:重命名
        • 2.6 @RestController:数据控制器
        • 2.7 @ResponseBody:数据格式
        • 2.8 @CookieValue:获取Cookie
        • 2.9 @SessionAttribute:获取Session
        • 2.10 @Data:类注解
    • 三:应用分层-三层架构
    • 四:总结

Spring Web MVC

一: 什么是Spring Web MVC?

SpringWebMVC是基于ServletAPI构建的原始Web框架,从⼀开始就包含在Spring框架中。它的正式名称“SpringWebMVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为)SpringMVC).
MVC是⼀种架构设计模式,也⼀种思想,⽽SpringMVC是对MVC思想的具体实现.除此之外,SpringMVC还是⼀个Web框架.
总结来说,SpringMVC是⼀个实现了MVC模式的Web框架

MVC的定义
MVC是ModelViewController的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分
为模型、视图和控制器三个基本部分
在这里插入图片描述
• View(视图)指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
• Model(模型)是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
• Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型
来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型

二:Spring MVC中常用注解的使用

2.1 @RequestMapping:地址映射

@RequestMapping既可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类路径+⽅
法路径.
@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息

@RequestMapping("/user")
@RestController
public class UserController {
	@RequestMapping("/sayHi")
	public String sayHi(){
	return "hello,Spring MVC";
	}
}
2.2 @RequestBody:请求正文

RequestBody:请求正⽂,意思是这个注解作⽤在请求正⽂的数据绑定,请求参数必须在写在请求正
⽂中

@RequestMapping(value = "/m7")
public Object method7(@RequestBody Person person) {
	return person.toString();
}
2.3 @PathVariable:路径变量

pathvariable:路径变量
和字⾯表达的意思⼀样,这个注解主要作⽤在请求URL路径上的数据绑定
默认传递参数写在URL上,SpringMVC就可以获取到
后端实现代码:

@RequestMapping("/m8/{id}/{name}")
public String method8(@PathVariable Integer id, @PathVariable("name") StringuserName){
		return "解析参数id:"+id+",name:"+userName;
}

如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时,可以简写,不⽤给@PathVariable的属性赋
值,如上述例⼦中的id变量
如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时,需要@PathVariable的属性value赋值,
如上述例⼦中的userName变量

2.4 @RequestPart:上传文件

RequestPart主要是用于客户端上传文件交给服务器进行处理
后端代码实现:

@RequestMapping("/m9")
public String getfile(@RequestPart("file") MultipartFile file) throwsIOException {
	//获取⽂件名称
		String fileName = file.getOriginalFilename();
	//⽂件上传到指定路径
		file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));
		return "接收到⽂件名称为: "+fileName;
}
2.5 @RequestParam:重命名

某些特殊的情况下,前端传递的参数key和我们后端接收的key可以不⼀致,⽐如前端传递了⼀个
time给后端,⽽后端是使⽤createtime字段来接收的,这样就会出现参数接收不到的情况,如果出现
这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值
后端实现代码:

@RequestMapping("/m4")
public Object method_4(@RequestParam("time") String createtime) {
		return "接收到参数createtime:" + createtime;
}

可以得出结论:

  1. 使⽤ @RequestParam 进⾏参数重命名时,请求参数只能和 @RequestParam 声明的名称⼀
    致,才能进⾏参数绑定和赋值.
  2. 使⽤ @RequestParam 进⾏参数重命名时,参数就变成了必传参数.
2.6 @RestController:数据控制器

是Contronller和ResponseBody的封装,用于返回数据同时能够将注解内容交给Spring进行管理
@RestController = @Controller + @ResponseBody
@Controller :定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理.
@ResponseBody :定义返回的数据格式为⾮视图,返回⼀个text/html信息

2.7 @ResponseBody:数据格式

@ResponseBody :定义返回的数据格式为⾮视图,返回⼀个text/html信息

@ResponseBody
public class IndexController {
	@RequestMapping("/index")
		public Object index(){
		return "/index.html";
	}
}

@ResponseBody 既是类注解,⼜是⽅法注解
如果作⽤在类上,表⽰该类的所有⽅法,返回的都是数据,如果作⽤在⽅法上,表⽰该⽅法返回的是数据.
也就是说:在类上添加 @ResponseBody 就相当于在所有的⽅法上添加了 @ResponseBody 注解.
同样,如果类上有 @RestController 注解时:表⽰所有的⽅法上添加了 @ResponseBody 注
解,也就是当前类下所有的⽅法返回值做为响应数据
设置状态码
SpringMVC会根据我们⽅法的返回结果⾃动设置响应状态码,程序员也可以⼿动指定状态码
通过SpringMVC的内置对象HttpServletResponse提供的⽅法来进⾏设置

	@ResponseBody
	public String setStatus(HttpServletResponse response) {
		response.setStatus(401);
		return "设置状态码成功";
	}
2.8 @CookieValue:获取Cookie

Cook是用户客户端用于保存用户的基本信息,以便于用户在下一次登录时可以直接进入
在这里插入图片描述

@RequestMapping("/getCookie")
public String cookie(@CookieValue("bite") String bite) {
	return "bite:" + bite;
}
2.9 @SessionAttribute:获取Session

Session是服务器为了保存⽤⼾信息⽽创建的⼀个特殊的对象

在这里插入图片描述
Session的本质就是⼀个"哈希表",存储了⼀些键值对结构.Key就是SessionID,Value就是⽤⼾信息(⽤
⼾信息可以根据需求灵活设计).
SessionId是由服务器⽣成的⼀个"唯⼀性字符串",从Session机制的⻆度来看,这个唯⼀性字符串称
为)SessionId).但是站在整个登录流程中看待,也可以把这个唯⼀性字符串称为)token).
在这里插入图片描述

  1. 当⽤⼾登陆的时候,服务器在Session中新增⼀个新记录,并把sessionId返回给客⼾端.(通过
    HTTP响应中的Set-Cookie字段返回).
  2. 客⼾端后续再给服务器发送请求的时候,需要在请求中带上sessionId.(通过HTTP请求中的
    Cookie字段带上).
  3. 服务器收到请求之后,根据请求中的sessionId在Session信息中获取到对应的⽤⼾信息,再进⾏后
    续操作.找不到则重新创建Session,并把SessionID返回
@RequestMapping("/getSess2")
public String sess2(@SessionAttribute(value = "username",required = false)String username) {
		return "username:"+username;
}

Cookie和Session的区别
• Cookie是客⼾端保存⽤⼾信息的⼀种机制.Session是服务器端保存⽤⼾信息的⼀种机制.
• Cookie和Session之间主要是通过SessionId关联起来的,SessionId是Cookie和Session之间的
桥梁
• Cookie和Session经常会在⼀起配合使⽤.但是不是必须配合.
◦ 完全可以⽤Cookie来保存⼀些数据在客⼾端.这些数据不⼀定是⽤⼾⾝份信息,也不⼀定是
SessionId
◦ Session中的sessionId也不需要⾮得通过Cookie/Set-Cookie传递,⽐如通过URL传递.

2.10 @Data:类注解

Lombok是⼀个Java⼯具库,通过添加注解的⽅式,简化Java的开发其中@Data 注解会帮助我们⾃动⼀些⽅法,包含getter/setter,equals,toString等
Lombok的作⽤如下图所⽰:

在这里插入图片描述
如果觉得@Data⽐较粗暴(⽣成⽅法太多),lombok也提供了⼀些更精细粒度的注解

注解作⽤
@Getter⾃动添加getter⽅法
@Setter⾃动添加setter⽅法
@ToString⾃动添加toString⽅法
@EqualsAndHashCode⾃动添加equals和hashCode⽅法
@NoArgsConstructor⾃动添加⽆参构造⽅法
@AllArgsConstructor⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull属性不能为null
@RequiredArgsConstructor⾃动添加必需属性的构造⽅法,final+@NonNull的属性为必需

@Data=@Getter+@Setter+@ToString+@EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor
因此可以说明在创建类对象时可以通过引入lambok工具包中的@Data注解,可以自动为我们添加其很多常用的赋值方法

三:应用分层-三层架构

⽬前现在更主流的开发⽅式是"前后端分离"的⽅式,后端开发⼯程师不再需要关注前端的实现,所以对
于Java后端开发者,⼜有了⼀种新的分层架构:把整体架构分为表现层、业务逻辑层和数据层.这种分层
⽅式也称之为"三层架构".

  1. 表现层:就是展⽰数据结果和接受⽤⼾指令的,是最靠近⽤⼾的⼀层;
  2. 业务逻辑层:负责处理业务逻辑,⾥⾯有复杂业务的具体实现;
  3. 数据层:负责存储和管理与应⽤程序相关的数据
    可以看到,咱们前⾯的代码,并不符合这种设计思想,⽽是所有的代码堆砌在⼀起

按照上⾯的层次划分,SpringMVC站在后端开发⼈员的⻆度上,也进⾏了⽀持,
• 请求处理、响应数据:负责,接收⻚⾯的请求,给⻚⾯响应数据.
• 逻辑处理:负责业务逻辑处理的代码.
• 数据访问:负责业务数据的维护操作,包括增、删、改、查等操作

在这里插入图片描述
• Controller:控制层。接收前端发送的请求,对请求进⾏处理,并响应数据。
• Service:业务逻辑层。处理具体的业务逻辑。
• Dao:数据访问层,也称为持久层。负责数据访问操作,包括数据的增、删、改、查
MVC和三层架构的区别和联系
关于⼆者的关系,⼀直存在不同的观点.有⼈认为三层架构是MVC模式的⼀种实现,也有⼈认为MVC是
三层架构的替代⽅案,等等各种说法都有.根本原因是⼤家站在不同的⻆度来看待这个问题的.
JavaEE部分的学习重在"实践",⼤家根据⾃⼰的理解,能够⾃圆其说,说出⾃⼰的观点即可,也不建议
⼤家去背书.

从概念上来讲,⼆者都是软件⼯程领域中的架构模式.
MVC架构模式由三部分组成,分别是:模型(Model),视图(View)和控制器(Controller).
三层架构将业务应⽤划分为:表现层,业务逻辑层,数据访问层.
在这里插入图片描述
MVC中,视图和控制器合起来对应三层架构中的表现层.模型对应三层架构中的业务逻辑层,数据层,
以及实体类
⼆者其实是从不同⻆度对软件⼯程进⾏了抽象.
MVC模式强调数据和视图分离,将数据展⽰和数据处理分开,通过控制器对两者进⾏组合.
三层架构强调不同维度数据处理的⾼内聚和低耦合,将交互界⾯,业务处理和数据库操作的逻辑分开.
⻆度不同也就谈不上互相替代了,在⽇常的开发中可以经常看到两种共存的情况,⽐如我们设计模型
层的时候往往也会拆分出业务逻辑层(Service层)和数据访问层(Dao层)

四:总结

1.学习SpringMVC,其实就是学习各种Web开发需要⽤的到注解
a. @RequestMapping:路由映射
b. @RequestParam:后端参数重命名
c. @RequestBody:接收JSON类型的参数
d. @PathVariable:接收路径参数
e. @RequestPart:上传⽂件
f. @ResponseBody:返回数据
g. @CookieValue:从Cookie中获取值
h. @SessionAttribute:从Session中获取值
i. @RequestHeader:从Header中获取值
j. @Controller:定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理.默认返回
视图.
k. @RestController:@ResponseBody+@Controller返回数据

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

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

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

相关文章

成绩管理系统|基于springboot成绩管理系统的设计与实现(附项目源码+论文)

基于springboot成绩管理系统的设计与实现 一、摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装毕业设计成绩管…

全局自定义指令实现图片懒加载,vue2通过js和vueuse的useintersectionObserver实现

整体逻辑: 1.使用全局自定义指令创建图片懒加载指令 2.在全局自定义指令中获取图片距离顶部的高度和整个视口的高度 3.实现判断图片是否在视口内的逻辑 一、使用原生js在vue2中实现图片懒加载 1.创建dom元素,v-lazy为自定义指令,在自定义指令传入图片…

瑞吉外卖实战学习--8、人员编辑更新

人员编辑更新 前言1、进入编辑窗口需要先获取用户信息2、通过上篇文章的update的方法来改变数据3、测试效果 前言 1、进入编辑窗口需要先获取用户信息 通过注解PathVariable 来获取路径需要携带的id然后赋值到路径上,再通过id查询用户信息 /*** 通过id查询用户信…

Java毕业设计-基于springboot开发的招聘信息管理系统平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、企业后台管理模块4、用户后台管理模块 四、毕设内容和源代码获取总结 Java毕业设计-基于spri…

黄金涨是商品牛市的领先信号

自2022年11月以来,黄金价格持续上涨,目前已经突破历史新高,历史上黄金上涨,大多是商品全面牛市的领先信号。在2008年Q4、2019年也出现过,黄金比其他商品更强,但随后的2009年和2020年均是商品的全面牛市。同…

【前端】layui前端框架学习笔记

【前端目录贴】 参考视频:LayUI 参考笔记:https://blog.csdn.net/qq_61313896/category_12432291.html 1.介绍 官网:http://layui.apixx.net/index.html 国人16年开发的框架,拿来即用,门槛低 … 2. LayUi的安装及使用 Layui 是一套开源的 Web UI 组件库&#xff0…

【论文阅读】UniLog: Automatic Logging via LLM and In-Context Learning

注 由于其公司的保密政策,本文没有公开源代码,数据是公开的。 文章目录 摘要一、介绍二、背景和动机2.1、日志语句生成2.2、大语言模型2.3、上下文学习(In-Context Learning,ICL) 三、UNILOG3.1、模型骨干3.2、提示策略3.2.1、提…

stable diffusion如何下载预处理器?

如何下载预处理器? 具体位置:SD文件>extensions>sd-webui-controlnet>annotator” 把整个文件夹复制到SD的文件夹里面 里面有一个“downloads”文件夹 把这些模型复制到“downloads”文件夹里

YOLOV5训练自己的数据集教程(万字整理,实现0-1)

文章目录 一、YOLOV5下载地址 二、版本及配置说明 三、初步测试 四、制作自己的数据集及转txt格式 1、数据集要求 2、下载labelme 3、安装依赖库 4、labelme操作 五、.json转txt、.xml转txt 六、修改配置文件 1、coco128.yaml->ddjc_parameter.yaml 2、yolov5x.…

PLC的大脑和心脏——CPU及其分类、端子接线图

CPU不断地采集输入信号,执行用户程序,刷新系统的输出。 根据供电方式和输入/输出方式的不同,CPU分为3类,如下图1。 图1 CPU的分类 第1对字母,表示CPU的供电方式,AC(Alternating Current&#…

vcf文件可以用excel打开吗?四种解决方案

vcf文件可以用excel打开吗? 当然可以。 一、VCF文件简介 VCF(vCard)文件是一种用于存储联系人信息的文件格式。它通常包含姓名、电话号码、电子邮件地址、地址等详细信息。VCF文件在多种设备和操作系统中广泛使用,特别是在电子邮…

百度云加速方法「Cheat Engine」

加速网盘下载 相信经常玩游戏的小伙伴都知道「Cheat Engine」这款游戏内存修改器,它除了能对游戏进行内存扫描、调试、反汇编 之外,还能像变速齿轮那样进行本地加速。 这款专注游戏的修改器,被大神发现竟然还能加速百度网盘资源下载&#xf…

MySQL数据库备份策略与实践详解

目录 引言 一、MySQL数据库备份的重要性 (一)数据丢失的原因 (二)数据丢失的后果 二、MySQL备份类型 (一)根据数据库状态 (二)根据数据的完整性 (三)…

uniapp开发App(二)开通 微信授权登录功能(应用签名、证书、包名 全明白)

前言:开发App肯定要包含登陆,常用登陆方式很多,我选择微信登陆。 一、如何获得微信的授权登陆 答:申请,根据uniapp官网的提示有如下三个步骤 开通 1. 登录微信开放平台区,添加移动应用并提交审核&#xf…

基于java+SpringBoot+Vue的网上书城管理系统设计与实现

基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含: 网上书城管理系统是一个基于互联网的在线购书平台&#…

MSTP环路避免实验(华为)

思科设备参考:MSTP环路避免实验(思科) 一,技术简介 MSTP(多生成树协议),MSTP解决了STP和RSTP没有考虑vlan的问题,STP和RSTP将所有的vlan共享为一个生成树实例,无法实现…

STM32 字符数组结束符 “\0”

STM32 字符数组结束符 “\0” 使用字符数组使用printf,string参考 使用字符数组 使用STM32的串口发送数据,核心代码如下: char str[] "hello world!\n\r";while(1) {HAL_UART_Transmit(&huart2, str, sizeof (str), 10);HAL…

AI预测福彩3D第22弹【2024年3月31日预测--第5套算法开始计算第4次测试】

今天,咱们继续进行本套算法的测试,今天为第四次测试,仍旧是采用冷温热趋势结合AI模型进行预测。好了,废话不多说了。直接上结果~ 仍旧是分为两个方案,1大1小。 经过人工神经网络计算并进行权重赋值打分后,3…

Spring Boot 使用 Redis

1&#xff0c;Spring 是如何集成Redis的&#xff1f; 首先我们要使用jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><gro…

px转rem VsCode插件和快捷键

安装插件 修改配置参数 设置里面的 快捷键 altz