SpringMVC组件
1.DispatcherServlet:前端控制器 用户请求到达前端控制器,它就相当于 mvc 模式中的c,DispatcherServlet 是整个流程控制的中心,相当于是 SpringMVC 的大脑,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。 2.HandlerMapping:处理器映射器 HandlerMapping 负责根据用户请求找到 Handler 即处理器(也就是我们所说的 Controller),SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等,在实际开发中,我们常用的方式是注解方式。 3.Handler:处理器 这里所说的 Handler 就是指我们的 Controller 4.HandlAdapter:处理器适配器 通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。 5.ViewResolver:视图解析器 ViewResolver 负责将处理结果生成 View 视图。
1, 用户发送请求至前端控制器DispatcherServlet
2, DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3, 返回处理器执行链HandlerExecutionChain。
4, DispatcherServlet通过HandlerAdapter处理器适配器调用合适的处理器
5, 执行处理器handler
6, handler执行完成返回ModelAndView(数据及视图)
7, HandlerAdapter将果ModelAndView返回给DispatcherServlet
8, DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9, ViewReslover解析后返回具体View对象
10, DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11, DispatcherServlet响应用户
get请求与post请求有什么区别?
-
GET请求在URL中传送的参数是有长度限制的,而POST没有。
-
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
-
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
-
GET参数通过URL传递,POST放在Request body中。
-
客户端发送json必须是post,content-type application/json 服务端示用requestbodu注解
5.8 请求数据出现乱码该怎么处理?
-
修改服务器的配置文件,显示声明请求路径的编码与服务器一致,这种方式只对GET请求有效。
Spring MVC的拦截器
拦截器处于dispatcherservlet与controller中间,拦截器需要实现handlerinterceptor,接口包含三个方法:prehandle()方法执行之前,会返回一个布尔值,false结束所有流程,true执行下一步,posthandle方法执行之后,aftercompletion方法执行完,放入ioc容器
注解加在类上面:
```
@Controller(spring注解)
@RestController
@ResponseBody
@RequestMapping
@CrossOrigin
```
注解加在方法上面
```
@RequestMapping("/hello")
@RequestMapping(path = "/hello",method = {RequestMethod.GET},params = {"age"})
method:指定请求方式,如果请求方式不匹配,报405错误
params:指定请求必要参数,如果不满足必要参数,报400
@GetMapping
@GetMapping(path = "/hello",params = {"age"})
//等价于@RequestMapping(path = "/hello",method = {RequestMethod.GET},params = {"age"})
@PostMapping
@PostMapping(path = "/hello",params = {"age"})
//等价于@RequestMapping(path = "/hello",method = {RequestMethod.POST},params = {"age"})
@ResponseBody
```
注解加在形参上面
```java
@RequestParam (接收请求参数)
eg: @RequestParam(value = "name1",required = true,defaultValue = "rose") String name
当参数名和方法的形参名一致时,这个注解可以省略不写
当参数名和方法的形参名不一致,必须使用该注解,指定参数名
注解属性:
required:表示必传参数,默认值是true
defaultValue:当没有传值,可以使用默认值。
@PathVariable
@RequestBody
@RequestHeader
```