Spring MVC
SpringMVC是基于MVC思想的JAVA WEB实现框架,是Spring家族的一员,它基于前置控制器来接收并分发请求,支持参考验证、请求参数封装、拦截、Restful等功能,是目前较为流行的MVC框架
本系列学习笔记包含如下的课程内容:
- MVC思想
- Hello案例
- 请求和响应处理
- 文件上传和下载处理
- 参数验证
- 请求拦截
- RESTful风格
- 日志
Request
框架的本质是对重复代码抽象,改为自动化执行。
对于浏览器提交给服务器的request请求,使用框架提供的便捷功能,可以显著提高开发效率。
常用配置如下:
@RequestParam
位置:方法参数前
作用:自动接收并和转换 request 中的参数
用法1:使用map接收所有参数
1 | "/demo1") ( |
将所有参数封装在 map 中,
有效降低 request.getParameter("xxx")
的代码量。
用法2:逐个接收参数
1 | "/demo1") ( |
不用写 request.getParameter("xxx")
,
同时还能提供自动类型转换。
参数数量较多时,写起来不便。
对象接收参数
当请求中参数数量较多时,推荐使用。
提供一个 User 自定义类来进行封装
1 | public class User { |
form提交参数
在 form 表单中提交 user 对象, 参数名直接写 User 类的属性名
1 | <form method="post" action="${path}/request/demo2"> |
控制器接收
1 | @RequestMapping("/demo2") |
不用写 request.getParameter("xxx")
,
提供自动类型转换的同时。
还可以进一步省略代码:
FAQ
@RequestParam 请求参数名与方法参数名不一致
如果请求中的参数名,与方法的参数名,不一致时.可以使用@RequestParam 的 value 属性来指定.
比如:1
"myAge") int age (
此时,请求请求参数 myAge ,对应到方法的参数 age
@RequestParam 针对请求中的参数不是必须的情况
设置 required 属性为 false即可.
比如:
1 | false) String name (required = |
如果请求中有指定的参数,就自动接收和转换; 如果请求中没有指定参数,也不会抛异常.
使用对象来接收参数时, 请求提交的参数数量,与封装类属性数量不一致
SpringMVC 仅替开发者自动实例化一个封装类的实例.即使 request 请求只提交了一个参数,而对应到的封装类有很多属性,SpringMVC 也还是会实例化对象,将这个参数写入对应属性.保留其他属性为默认值!
使用对象来接收参数时, 提交了多个对象的信息
比如:一个 form 表单,同时提交了 user 和 address 的信息,
可以考虑对多个对象进行封装,提供一个 Dto(Data Transfer Object,数据传递对象) 封装类:
1 | import com.tz.entity.Address; |
在 form 表单中,注意参数名的写法,是以 UserAddressDto 为根开始写.
1 | <form action="${path}/request/demo4" method="post"> |
在控制器中,以 UserAddressDto 接收即可:
1 | "/demo4")//将一个URL路径映射到当前类来处理 (value = |