SpringMVC复习

131 阅读3分钟

什么是SpringMVC?

1.SpringMVC是Spring的一个模块,SpringMVC和Spring无需整合层进行整合
2.SpringMVC是基于mvc的web框架
3.spring表现层:方便前后端数据的传输
4.SpringMVC:M模块层C控制层V显示层
image.png

  1. 发起请求到前端控制器(DispatcherServlet)
  2. 前端控制器请求HandlerMapping查找 Handler,可以根据xml配置、注解进行查找
  3. 处理器映射器HandlerMapping向前端控制器返回Handler
  4. 前端控制器调用处理器适配器去执行Handler
  5. 处理器适配器去执行Handler
  6. Handler执行完成给适配器返回ModelAndView
  7. 处理器适配器向前端控制器返回ModelAndView,ModelAndView是springmvc框架的一个底层对象,包括 Model和view
  8. 前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
  9. 视图解析器向前端控制器返回View
  10. 前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域
  11. 前端控制器向用户响应结果

SpringMVC 注解说明

@RequestMapping("/hello")实现浏览器的请求路径与方法的映射
@ResponseBody将服务器的返回值转化为JSON. 如果服务器返回的是String类型,则按照自身返回.
@RestController 表示Controller类,同时要求返回值为JSON
@PathVariable restFul结构,接收参数的注解.
@GetMapping("") 只能接收GET请求类型
@DeleteMapping("") 只能接收DELETE请求类型
@PostMapping("") 只能接收POST请求类型
@PutMapping("") 只能接收PUT请求类型
@CrossOrigin 允许跨域访问
@RequestBody 将JSON串转化为Java对象

前端

简化操作:axios.defaults.baseURL = "http://localhost:8080";
重点: RestFul的结构不区分请求类型. 任意请求都可以通过RestFul的结构发送数据.

模板方式传参: 反引号``

        字符取值: ${rest2.id}
        * 作用: 1.常见字符串拼接 * 2.可以保证代码的数据结构

POST请求

前端代码传递的JS对象,而后端使用的是java对象,
2种对象没有办法直接转化,需要转化JSON进行传递.
axios使用post请求时,自动将JS对象解析为JSON串 需要使用到@RequestBody

同源策略

浏览器的网址与Ajax请求的网址必须满足如下的要求: 协议://域名:端口号必须相同.
如果满足要求则是同域访问,如果不满足要求 则是跨域访问

解决使用@CrossOrigin 允许跨域访问\

CORS介绍

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

Ajax优化

回调地狱优化-async-await

  1. async 控制同步异步 标识函数\
  2. await 标识Ajax请求
<script>
			axios.defaults.baseURL = "http://localhost:8080"
			
			/**
			 * 1.定义一个函数
			 * 规则: 
			 * 		1. async 标识函数
			 * 		2. await 标识请求
			 * 		3. 2者必须同时出现
			 * 		4. 可以直接获取then中的回调对象promise
			 */
			async function saveUser(){
				let user = {id: 100,name:"春节已过!!!"}
				let promise = await axios.post("/axios/saveUser",user)
				console.log(promise.data)
			}
			
			/* 2.调用函数 */
			saveUser()
</script>

箭头函数写法

/* 3.箭头函数写法
				1.去除function关键字
				2.参数与函数体之间使用 => 连接
				3.如果只有一个参数,则参数括号可以省略
				4.箭头函数使用一般用于回调函数
				5.如果使用function关键字 则使用this时会产生歧义
			 */
			let user2 = {id: 200,name:"箭头函数!!!"}
			axios.post("/axios/saveUser",user2)
				 .then(function(promise){
					console.log(promise.data)
				 })
			axios.post("/axios/saveUser",user2)
				 .then(	promise => {
					console.log(promise.data)
				 })