(资料图)
SpringMVC 处理流程.PNG
用户发送请求至前端控制器 DispatcherServlet;DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器;处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet;DispatcherServlet 调用 HandlerAdapter 处理器适配器;HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器);Controller 执行完成返回 ModelAndView;HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给 DispatcherServlet;DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器;ViewReslover 解析后返回具体 View;DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中);DispatcherServlet 响应用户。@RequestMapping:给控制器方法绑定一个 uri;@ResponseBody:将 Java 对象转成 json,并且发送给客户端;@RequestBody:将客户端请求过来的 json 转成 Java 对象;@RequestParam:当表单参数和方法形参名字不一致时,做一个名字映射;@PathVarible:用于获取 uri 中的参数,比如 user/1 中 1 的值。
@RestController:相当于 @Controlle r+ @ResponseBody;@GetMapping:还包括 @DeleteMapping、@PostMapping、@PutMapping 等相当于 @RequestMapping 加对应的 http 请求方法;
@SessionAttribute:声明将什么模型数据存入session;@CookieValue:获取 cookie 值;@ModelAttribute:将方法返回值存入 model 中;@HeaderValue:获取请求头中的值。
通过配置 Spring MVC 字符编码过滤器来解决Post 请求中文乱码的问题,在 web.xml 中添加:
CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 CharacterEncodingFilter /*
控制器兼容:
@RequestMapping("/upload")public void upload(@RequestParam("file") MultipartFile file) throws Exception { System.out.println(file.getOriginalFilename());}