
(資料圖)
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());}