Spring04——Spring MVC 全解析

前文分別介紹了 Spring IOC 與 Spring AOP 的相關知識,本文將爲各位大概帶來 Spring MVC 的知識點。關注我的公衆號「Java面典」,每天 10:24 和你一起了解更多 Java 相關知識點。

處理流程

SpringMVC 處理流程.PNG

  1. 用戶發送請求至前端控制器 DispatcherServlet;
  2. DispatcherServlet 收到請求調用 HandlerMapping 處理器映射器;
  3. 處理器映射器找到具體的處理器(可以根據 xml 配置、註解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一併返回給 DispatcherServlet;
  4. DispatcherServlet 調用 HandlerAdapter 處理器適配器;
  5. HandlerAdapter 經過適配調用具體的處理器(Controller,也叫後端控制器);
  6. Controller 執行完成返回 ModelAndView;
  7. HandlerAdapter 將 Controller 執行結果 ModelAndView 返回給 DispatcherServlet;
  8. DispatcherServlet 將 ModelAndView 傳給 ViewReslover 視圖解析器;
  9. ViewReslover 解析後返回具體 View;
  10. DispatcherServlet 根據 View 進行渲染視圖(即將模型數據填充至視圖中);
  11. DispatcherServlet 響應用戶。

常用註解

基本註解

@RequestMapping:給控制器方法綁定一個 uri;
@ResponseBody:將 Java 對象轉成 json,並且發送給客戶端;
@RequestBody:將客戶端請求過來的 json 轉成 Java 對象;
@RequestParam:當表單參數和方法形參名字不一致時,做一個名字映射;
@PathVarible:用於獲取 uri 中的參數,比如 user/1 中 1 的值。

Rest風格的新api

@RestController:相當於 @Controlle r+ @ResponseBody;
@GetMapping:還包括 @DeleteMapping、@PostMapping、@PutMapping 等相當於 @RequestMapping 加對應的 http 請求方法;

其他註解

@SessionAttribute:聲明將什麼模型數據存入session;
@CookieValue:獲取 cookie 值;
@ModelAttribute:將方法返回值存入 model 中;
@HeaderValue:獲取請求頭中的值。

使用技巧

中文亂碼

通過配置 Spring MVC 字符編碼過濾器來解決Post 請求中文亂碼的問題,在 web.xml 中添加:

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <!-- 設置編碼格式 -->
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

文件上傳

  1. 引入jar包: commons-io-1.3.2.jar 和 commons-fileupload-1.2.1.jar;
  2. 配置xml:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
  1. 控制器兼容:
@RequestMapping("/upload")
public void upload(@RequestParam("file") MultipartFile file) throws Exception {
    System.out.println(file.getOriginalFilename());
}

Spring 系列推薦

Spring03——有關於 Spring AOP 的總結

Spring02——Spring 中 Bean 的生命週期及其作用域

Spring01——你應該瞭解的,有關 IOC 容器的一切

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章