SpringMVC学习
mvc是什么意思
Model:数据模型,用于封装数据
View:页面视图,展示数据
Controller:处理用户交互的调度器,用于根据用户需求处理程序逻辑
SpringMVC特点:
1、轻量级Web框架
2、可以集成其他的web框架
3、它可以通过一套注解,让java类成为处理器(控制器)替代以前的Servlet
4、支持RESTful编程风格的请求
用法
如果不是通过扫描式配置文件
SpringMvcConfig 只扫描控制器所在的包
@RequestMapping(“/xxx”) //指定这个方法的访问地址
@ResponseBody //如果加上这个注解,返回的字符串不再是跳转的地址,而是直接输出到浏览器上
SpringMVC各组件的作用
PostMan简介
是一款功能强大的网页调试与发送网页HTTP请求的软件(跟swagger类似)
@RequestMapping //请求映射路径
类型:方法注解 类注解
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器方法请求访问路径,如果设置在类上则统一设置控制器方法请求路径的前缀
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'module':'user save'}";
}
@RequestParam //请求参数
类型:形参注解
位置:SpringMVC控制器方法形参定义前面
作用:绑定请求参数与处理器方法形参间的关系
属性:
required:是否为必传参数,默认是true,没有提供会出现400异常,设置为false,则不是必须要提供的参数,他的值为null
defaultValue:参数默认值,如果没有传递参数,则使用默认值
应用条件:请求参数与形参变量名不同,请求参数名与形参集合对象名相同且请求参数为多个
@DateTimeFormat //日期类型传递参数
类型:形参注解
位置:SpringMVC控制器方法形参前面
作用:设定日期时间数据格式,默认是yyyy/MM/dd
//主配置类添加
@EnableWebMvc //开启一些辅助功能, 如:日期转换,json格式转换
//形参前添加
@DateTimeFormat(pattern = "yyyy-MM-dd")
@RequestBody //请求体
类型:形参注解
位置:SpringMVC控制器方法形参定义前面
作用:将请求中请求体所包含的数据传递给请求参数,此注解在一个处理器方法中只能使用一次
@ResponseBody //响应体
类型:方法注解
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器返回值为响应体,响应内容为当前返回值
注意:没加的话就是跳转,加了就不跳转了
SpringMVC解决中文汉字乱码问题
接收请求中的json数据
1.添加json数据转换相关坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind< / artifactId><version>2.9.0</version>
</ dependency>
2.设置发送json数据
往请求body中 添加json数据
3.开启自动转换json数据的支持
@EnableWebMvc
4.设置接收json数据
在形参前面加@RequestBody
请求参数是对象时,如何传递json字符串
POJO参数:json数据与形参对象的属性名相同,定义POJO类型形参即可接收参数 注:要使用POST请求
请求参数是对象集合时,如何传递json字符串
POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数
@RequestBody与@RequestParam区别
区别:
-
@RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
- 传递的参数格式是:键=值&键=值
- 底层使用时getParameter(”键“)方法
-
RequestBody用于接收json数据【application/json】
- 数据在请求体中,不能用于GET方法,只能出现一次,因为每次请求只有一个请求体
- 不能获取键值对的数据,底层使用getReader()方法
应用:
- 后期开发中,发送json格式数据为主,@ReqeustBody应用比较广泛
- 如果发送非json格式数据,选用@RequestParam接收请求参数
响应页面
方法上面没有@ResponseBody注解
@RequestMapping("/toPage")
public String toPage(){
return "page.jsp";
}
页面的跳转:
重定向
redirect:地址
转发:
forward:地址
客户端提交给服务端参数传递有两种方式:
1.普通参数:键值对 服务器端接收时要求方法形参名字,与提交的参数一致
2.json字符串:服务器端方法形参前面要加@RequestBody,将JSON字符串转成对象
RESTful风格编程
特点
1、操作同一个url使用相同的地址访问
2、客户端使用GET、POST、PUT、DELETE四种方式
3、使用/ ,不用?
查询、新增、修改、删除
访问风格的对比
@RequestMapping的属性
value:请求访问路径
method:http请求动作,标准动作(GET/POST/PUT/DELETE)
@PathVariable
类型:形参注释
位置:SpringMVC控制器方法形参定义前面
作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
@RestController
类型:类注解
位置:基于SpringMVC的RESTful开发控制器类定义上方
作用:设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能
@GetMapping @PostMapping @PutMapping @DeleteMapping
类型:方法注解
位置:基于SpringMVC的RESTful开发控制器方法定义上方
作用:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetMapping对应GET请求
设置对静态资源的访问放行
@Configuration
public class SpringMvcSupport extends webMvcConfigurationSupport {
@override
protected void addResourceHandlers(ResourceHandlerRegistry registry){
1/当访问/pages/xxx时候,走/ pages日目录下的内容,最后以/结尾
/一个星号只访间下一级目录,两个星号表示访间子孙目录
registry.addResourceHandler("/pages/**") .addResourceLocations(" /pages/");registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler( " /css/**") . addResourceLocations(" /css/");
registry.addResourceHandler( "/plugins/*" ).addResourceLocations("/plugins/");
}