SpringMVC(Spring Web)

现在项目的开发基本都是依赖于SSM,即SpringBoot + SpringMVC + MyBatis,其中,SpringMVC 框架主要是用来便于开发者进行网页开发。Spring MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。

什么是MVC:

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

MVC 和 SpringMVC 的关系:

MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。

创建SpringMVC 项目:

使用SpringBoot 来创建,只需要在创建项目时添加web依赖就可以:

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

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

路由映射:所谓的路由映射指的是,当用户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。

@RequestMapping 即可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类 + ⽅法(类和方法上方注解中的value值);当只有方法被修饰时,直接访问方法就可以,此外该注解支持多种http请求方法,通过修改method属性值进行更改。

仅支持单一http方法的注解:

2.实现获取参数的功能

2.1 获取单个参数

当@RequestMapping注解中的value值不加"/"时,会根据类上的注解中的value值进行相对路径的定位。一般情况下还是加"/"比较好,防止出错。

2.2 获取多个参数

传入的多个参数之间用"&"连接:

获取多个参数,并对参数重命名,该情况是发生在前后端对参数的命名不一致时使用:

@RequestParam 注解默认情况下其修饰的变量为必须传入,不传参会报错,修改其属性,required = false 即可改变,另外,该注解主要是用于获取HTTP get方法中的query string信息,也就是utl中"?"之后的参数。

修改后:

2.3 获取一个对象

普通格式的数据:

json 格式的数据(通过postman来构造数据):

@RequestBody 注解,主要是用于获取post请求中body部分的数据,根据请求头中的Content-Type来确定body部分的数据,再根据代码中的参数类型进行参数的转换:

2.4 从基础URL 中获取参数

@PathVailable 注解,主要是用于从URL 基础路径中获取参数,也就是从URL "?"之前的路径中获取参数,其默认情况下也是要必须传入参数,否则会报错,通过required属性进行修改:

2.5 上传文件

@RequestPart 注解用于将 multipart/form-data 类型的请求映射到控制器处理方法的参数中。这个注解可以用于处理文件上传的情况。

使用postman 来上传文件:

此时,还存在一个问题,后续上传的文件会将前面的文件覆盖,解决办法,对每次上传的文件给一个独一无二的文件名:

2.6 获取cookie

传统方式获取cookie:

在网页设置两个cookie:

查看运行结果:

通过注解来获取cookie:

运行结果:

2.7 获取header

传统方式:

通过注解来获取:

2.8 获取session

先进行session 的设置,然后进行获取:

运行结果:

3. 返回数据

3.1 返回非静态页面数据

类上方加注解 @RequestBody,上述获取到数据,并在页面显示均是这种方式。

3.2 返回静态页面数据

去掉上述注解,返回静态页面文件:

3.3 请求转发和请求重定向

forward: 请求转发

redirect: 请求重定向

区别:

  1. 请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。

  2. 请求重定向地址发⽣变化,请求转发地址不发⽣变化。

  3. 请求重定向与直接访问新地址效果⼀直,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问。

示例:

请求转发:

url 地址不发生变化:

请求重定向:

可以看到在请求发送的一瞬间,url发生变化:

下面代码中,第一部分执行成功,第二部分无法访问,因为请求转发是由服务器访问,其无法访问外部资源。

SpringBoot 开启热部署

添加依赖(图示添加是使用的Edit Starters插件):

需要在当前项目和新项目部分都做更改:

当前项目:

新项目:

相关推荐
程序员爱钓鱼1 小时前
Go语言实战案例 — 工具开发篇:实现一个图片批量压缩工具
后端·google·go
ChinaRainbowSea3 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
舒一笑3 小时前
同步框架与底层消费机制解决方案梳理
后端·程序员
minh_coo3 小时前
Spring框架事件驱动架构核心注解之@EventListener
java·后端·spring·架构·intellij-idea
enjoy嚣士3 小时前
springboot 之 HTML与图片生成 (2)
spring boot·html转图片
白初&5 小时前
SpringBoot后端基础案例
java·spring boot·后端
再睡亿分钟!5 小时前
Spring MVC 的常用注解
java·开发语言·spring boot·spring
麦兜*6 小时前
MongoDB 常见错误解决方案:从连接失败到主从同步问题
java·数据库·spring boot·redis·mongodb·容器
计算机学姐7 小时前
基于Python的旅游数据分析可视化系统【2026最新】
vue.js·后端·python·数据分析·django·flask·旅游
该用户已不存在8 小时前
你没有听说过的7个Windows开发必备工具
前端·windows·后端