目录
Spring MVC
什么是Spring MVC
MVC定义
MVC和Spring MVC的关系
学习Spring MVC
Spring MVC项目的创建和连接
注意
@RequestMapping是post还是get请求
获取参数
1.获取单个参数
2.获取多个参数
3.获取普通对象
4.获取form表单参数
5.获取form表单(多个参数)
6.获取JSON对象
7.获取上传文件
8.获取Cookie/Session/Header
重命名前端参数
获取URL中的参数
Spring MVC全称为Spring Web MVC ,Spring Web MVC可以叫做 Spring MVC 或者 Spring Web,
它是一个原始的基于Servlet API的Web框架,要了解Spring MVC就需要先清楚什么是MVC
MVC是Model View Controller的缩写,称为模型视图控制器,它是一种软件架构框架
Controller(控制器)是应用程序处理用户交互的部分,负责控制用户输入,读取数据,并向模型发送数据
Model(模型)是应用程序中处理数据逻辑的,负责在数据库中存储数据
Viem(视图)是程序中显示数据的,视图依赖于模型返回的数据而创建
可以认为MVC是一种思想而Spring MVC则是实现思想的具体实现,我们知道Spring MVC是基于Servlet API的Web框架,因此就可以通过URL获取到用户的请求
学习Spring MVC我们需要掌握三个功能
1.连接的功能:通过访问一个地址能够调用我们的Spring程序
2.获取参数的功能:用户访问会带上参数,在程序中想办法获取参数
3.输出数据的功能:处理业务逻辑后将程序执行的结果返回给用户
Spring MVC项目创建与Spring Boot创建方式相同,在创建时选择Spring Web就相当于创建了Spring MVC项目
项目创建成功,我们在Spring MVC中使用@RequesMapping来实现URL的映射,实现浏览器和程序的连接
可以看到上面使用了三个注解,分别解释一下作用
①@Controller代表要在Spring启动时加载并注册
②@ResponseBody代表当前类返回非静态页面
③RequestMapping代表使用"/xx"可以访问当前类或者方法
1.@RequestMapping注解是Spring Web中最常见的注解之一,它是用来注册接口的路由映射的(用户访问URL,将用户的请求对应到程序的某个类的某个方法的过程称为路由映射)
2.我们还可以使用@RestController代替@Controller+@ResponseBody,表示我是一个http控制器,返回的是非静态页面的数据
我们可以通过postman来验证结果
可以看到@RequestMapping是同时支持post和get请求的,那如果想要只能同时支持其中一种呢
可以通过method方法指定请求方式是post还是get,或者使用注解@PostMapping/GetMapping
@PostMapping("/hi")
@GetMapping("/hi")
可以通过servlet中的request方法获取参数,在Spring MVC中默认内置隐藏了两个参数,一是Request (HttpServletRequest),另一是Response (HttpServletResponse)对象,所以想使用只需要在方法中声明就能获取到
Spring MVC(Spring Web)主要获取参数的方式
Spring MVC中当传递多个参数的时候,传递参数的顺序是不影响程序执行的,获取参数的结果只和名称有关和顺序无关
注意:获取JSON对象必须满足上面的两个条件(Content-Type,Body),如果获取JSON对象需要使用注解@RequestBody并且使用@RequestBody只能获取到JSON对象不能获取属性
使用注解@RequestPart参数myfile对应key,在使用file对象的transferTo()方法进行保存
可以通过注解@CookieValue或者使用内置的HttpServletRequest对象的getCookies方法()
获取session可以使用注解@sessionAttribute,参数value表示要获取session名字是什么,required表示是否是必须的,默认是true(此时没有对应的session则会报错),或者使用HttpServletRequest
获取Header信息可以使用注解@RequestHeader或者使用HttpServletRequest对象的getHeader()方法来获取
正常情况下前端与后端传递的key应该相同但是如果不一致如何应对呢?这就需要使用@RequestParam注解来重命名后端的参数值
如果是非必传参数要设置required为false使其不会报错
有些场景下可能需要在URL中设置参数,那么如何在URL中获取参数呢
注意:在@RequestMapping("login4/{name}/{passworld}")中{}参数是不可省略的配合注解@PathVariable就可以拿到URL中的参数
1.请求转发服务器端转发,请求重定向将请求重新定位到资源
2.请求转发地址不发生变化,请求重定向地址发生变化
3.请求转发服务器端转发可能造成原外部资源不能访问,请求重定向与直接访问新地址效果相同,不会造成原外部资源不能访问