SpringMVC
- 其他
- 2025-08-15 21:24:02

目录
什么是Spring MVC
Spring MVC的执行流程
创建Spring MVC项目
怎么学习Spring MVC
Spring MVC 的使用
1.连接
2.获取
1.获取单个参数
2..获取对象
3.获取参数的重命名
4.获取JSON对象
5.获取URL参数
6.获取上传文件
7.获取Cookie
8.获取session
9.获取header
3.输出
1.返回 text 与静态页面
实现一个网页计算器
2.返回一个JSON对象
实现一个登录界面
3.请求转发 与 请求重定位 (重点)
请求转发与请求重定位的区别
什么是Spring MVC
Spring MVC 是一个web框架,而且是基于servlet API 构建的.
MVC 的全称是 model(模型) view(视图) controller(控制)
MVC是一种设计思想,而Spring MVC就是具体实现它的方式. 就好比IoC容器的设计思想,具体实现是通过依赖注入(DI) 依赖查找
MVC 是 Model View Controller 的缩写,它是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。
控制器: 在应用程序中用于处理前后端数据交互的部分,负责从视图读取数据,控制用户输入发送给模型模型: 在应用程序中用于处理数据逻辑的部分,负责在数据库存取数据视图: 在应用程序中用于处理数据显示的部分,负责将模型响应的数据生成视图给用户 Spring MVC的执行流程如上图
用户的请求首先到Controller
Controller将请求信息发送给model
model在数据库获取数据后返回给Controller
Controller再将数据返回给view
最后由view将数据生成最终的页面提供给用户
创建Spring MVC项目在项目创建中勾选Spring Web 就是勾选了Spring MVC项目
通过下面的描述中我们也可以看到,它说使用了Spring MVC
怎么学习Spring MVC当我们学会了以下三种功能后,就基本上掌握了Spring MVC
连接 将用户(浏览器)与Java程序连接起来,使用用户可以通过地址访问程序获取参数 获取用户访问请求中的参数输出数据 把程序的执行结果返回给用户 Spring MVC 的使用 1.连接 在 Spring MVC 中使⽤ @RequestMapping 来实现 URL 路由映射,也就是浏览器连接程序的作⽤。 接下来要实现的功能是访问地址: http://localhost:8080/user/hi ,能打印“hello,spring mvc”信息。新建一个User类
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class User { @RequestMapping("/user/hi") public String sayHi(){ return "Hi , Spring MVC"; } }@RequestMapping 默认是Get 请求 Post请求都能接收
如果我们想指定接收 Get请求
// 写法 1 @ RequestMapping ( "/index" ) // 写法2 @ RequestMapping ( value = "/index" , method = RequestMethod . GET ) // 写法3 @GetMapping( "/index" )如果想指定接收 Post请求
// 写法2 @ RequestMapping ( value = "/index" , method = RequestMethod . POST ) // 写法3 @PostMapping( "/index" )如图,设置为Post 后再用 Get请求就会报错, Post请求则能成功获取
Post:
2.获取 1.获取单个参数这里创建的对象名必须与请求中的key值一致,才可成功获取
2..获取对象如果要获取多个参数,再如上一个一个输入就太麻烦了,我们通过一个对象来接收
model包里新建Student类 通过@Data 注解自动生成getter,setter等方法
controller包里新建StudentController类,方法是获取这个对象然后返回这个对象
启动后打开网址 localhost:8080/object
3.获取参数的重命名如果用户传递参数的key值是 n , 我们觉得太粗略,可以通过@RequestParam 注解进行重命名
我们将其重命名为 name , 然后返回name
此时 n 是必传的参数,如果程序没获取到就会报错
参数不是n,报错了
我们再补充n上去,就正常了
如果参数 n 可传可不传,则要添加一个说明
此时不报错了
4.获取JSON对象java程序是不能直接获取JSON对象的,我们通过Postman来演示
构造了一个JSON对象后发送给java程序,返回的值都是null,说明JSON对象没有被获取到
通过注解@RequestBody 实现获取JSON对象
此处就是成功接收到了JSON对象 并返回了各参数的值
5.获取URL参数此处的URL参数不是指URL字符串里的参数,而是URL地址的参数
传递参数有两种方式
如图,csdn还是常规的URL格式,,存在键值对
而掘金网站的网页则是只有文章id, 这样就很简洁, 唯一定位到这篇文章
通过注解 @PathVariable
6.获取上传文件通过注解 @RequestPart
然后通过postman来实现一下,文件传输
选择Post请求,body,form-data,选择 File文件格式
key值一定要与注解 @RequestPart 的参数一致, 然后发送,后台就提示已成功保存到哪个路径里
打开这个路径就找到了保存的文件了
但这样的写法,是把文件名 和 文件后缀给写死的,因此我们要改进设置保存路径的代码
UUID通过一系列算法,保证了生成的id是全球唯一的
randomUUID() 生成随机值
toString() 将随机值打印为字符串
replace("-","") 去掉随机值中的横杠
通过 getOriginalFilename() 可以获取到原文件的名称
substring() 选择这一段字符串
lastIndexOf(".") 获取到从最后一个 "." 开始的字符串片段
再通过postman发送可以发现每次生成的图片名称都是不一样的,且文件后缀都是正确的
7.获取Cookie通过注解 @CookieValue
然后在网页按F12进入控制台
点击应用程序,Cookie, 右键新增一个cookie
key值要与注解 @CookieValue 的参数一致, value值随意
刷新网页,返回了value值,表示Java程序已经成功获取到了网页cookie
8.获取session通过注解 @SessionAttribute
该注解有两个属性, value 表示需要获取 Session 对象里面内容的 key 值,还有一个 require 表示修饰的参数是否必须,一般需要设置为 false,如果设置成 true,没有获取到对应的value就会返回一个400的页面。
9.获取header通过注解 @RequestHeader
header(请求报头)包含哪些内容,可以点击了解 http://t.csdnimg /6idLb
3.输出 1.返回 text 与静态页面在Spring MVC诞生之初, 前后端是不分离的, Spring通过注解 @Controller
因此后端向浏览器返回的不是一个数据,而是一个页面.
例如,当我们想返回一个字符串(text) " computer.html " , 却发现他返回了一个静态页面
所以, 如果需要传输的是数据, 而不是页面, 需要再添加一个注解 @ResponseBody
表明传输的是body数据
这样就能成功获取到字符串 computer.html 了
我们也可使用更简洁的注解 @RestController
@RestController = @Controller + @ResponseBody
实现一个网页计算器前端页面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>computer</title> </head> <body> <form action="computer"> <h1>计算器</h1> 数字1:<input name="num1" type="text"><br> 数字2:<input name="num2" type="text"><br> <input type="submit" value="查看结果"> </form> </body> </html>后端代码:
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ComputerController { @RequestMapping("/computer") public String computer(Integer num1,Integer num2){ // 非空验证 if (num1 == null || num2 == null) { return "<h2>参数错误!</h2><a href='javascript:history.go(-1)'>返回</a>"; } return "<h1>"+ (num1+num2) +"<h1>"; } }访问网页: localhost:8080/computer
效果:
2.返回一个JSON对象 实现一个登录界面通过这行代码,写死 登录成功的用户名是 张三 密码是 123456
succ 是一个用于表示操作结果的状态码,此处我们设置为200,
更常见的做法是,登录成功时返回200,登录失败时返回其他的状态码,比如400或401
前端代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src=" apps.bdimg /libs/jquery/2.1.4/jquery.min.js"></script> <title>login</title> <script> function mysub() { let username = jQuery("#username").val(); let password = jQuery("#password").val(); jQuery.getJSON("/login", { "username":username, "password":password }, function (result) { if(result.succ==200){ alert("返回结果:"+result.msg); }else{ alert("操作失败,请重试。"); } }); } </script> </head> <body> <div style="text-align: center;"> <h1>登录</h1> ⽤户:<input id="username"> <br> 密码:<input id="password" type="password"> <br> <input type="button" value=" 提交 " onclick="mysub()" style="margin-top: 20px; margin-left: 50px;"> </div> </body> </html>后端代码:
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; @RestController public class LoginCController { @RequestMapping("/login") public HashMap<String,String> res(String username,String password){ HashMap<String,String> response = new HashMap<>(); int succ = 200; if(username != null && password != null && username.equals("张三") && password.equals("123456")){ response.put("msg","登录成功"); }else { response.put("msg","登录失败"); } response.put("succ","200"); return response; } } 3.请求转发 与 请求重定位 (重点)return 不但可以返回一个视图,还可以实现跳转,跳转的方式分别为两种:
forward:请求转发redirect:请求重定向用法:
// 请求重定向 @RequestMapping("/computer") public String computer(){ return "redirect:/computer.html"; } // 请求转发 @RequestMapping("/computer2") public String computer2(){ return "forward:/computer2.html"; }请求转发:
浏览器通过 URL 访问某个地址获取资源, 这个地址是指向服务器的, 然后服务器会去访问资源所在的地址, 获取到资源后, 将资源返回给浏览器, 这期间 浏览器的 URL 是不变的
请求重定位:
浏览器通过 URL 访问某个地址获取资源, 这个地址是指向服务器的, 然后服务器会将资源所在的地址返回给浏览器, 然后浏览器会根据这个资源地址去访问获取资源, 这期间 浏览器的 URL 改变了
示例分析:
请求转发:
注意要将注解改为 @Controller , 不然会将返回值识别成字符串, 而不是html静态页面资源
请求重定位:
请求转发与请求重定位的区别 定义不同: 请求转发 发生在服务器内部程序上, 当服务器接收到客户端的请求后,服务器会去访问资源地址获取资源, 再将返回结果发送给客户端. 请求重定位 服务器接收到客户端的请求后, 会生成一个临时报头返回给客户端告知 资源所在地址URL, 客户端再通过这个资源地址自己去获取资源 资源的请求方不同: 请求转发 是由服务器帮客户端请求资源, 资源请求方是服务器 请求重定位 是由客户端自己去请求资源, 资源请求方是客户端数据共享不同: 请求转发是服务器端实现的,所以整个执行流程中,客户端(浏览器端)只需要发送一次请求,因此整个交互过程中使用的都是同一个 Request 请求对象和一个 Response 响应对象,所以整个请求过程中,请求和返回的数据是共享的;而请求重定向客户端发送两次完全不同的请求,所以两次请求中的数据是不同的最终的URL地址不同: 请求转发 指向的地址不变 请求重定位 指向的地址会变为资源所在地址代码实现不同