原創播客,如需轉載請注明出處。原文地址:http://www.cnblogs.com/crawl/p/7690973.html
前言:
本篇筆記是LZ在之前學習 SpringMVC 框架時所的記錄,分兩篇分享,此篇為基礎篇,包括 SpringMVC 環境在 Eclipse 中的搭建,SpringMVC 的 HelloWorld,常用注解:@RequestMapping、@PathVariable、@RequestParam、 @SessionAttributes、@ModelAttribute等,REST 風格的 URL 的使用、使用 POJO 對象綁定請求的參數、在 SpringMVC 的處理器的方法中使用原生的 Servlet 的 API、處理模型數據、@ModelAttribute 的源碼分析、SpringMVC 的視圖解析器及其流程的分析,最后還有一個 SpringMVC 的 CRUD 小案例。
筆記中提供了大量的代碼示例,需要說明的是,大部分代碼示例都是以圖片的形式展示的,所有的圖片都是來自本人所敲代碼的截圖,不足之處,請大家指正~
一、SpringMVC 的 HelloWorld
1.加入 jar 包 spring-framework-4.0.0.RELEASE\libs 下的 spring 基本 jar 包和 apache-commons\commons-logging-1.1.1 下的日志包

2.配置 web.xml 文件 Alt + / 選擇 dispatcherservlet

注:實際上也可以不通過 contextConfigLocation 來配置 SpringMVC 的配置文件,而是使用默認的,默認的配置文件的路徑和名字為:/WEB-INF/<servlet-name>-servlet.xml 其中 <servlet-name> 為 web.xml 文件中的配置的 SpringMVC 的 <servlet-name> 屬性值
3.類路徑下新建 Spring 的配置文件 springmvc.xml 選擇 beans context mvc 約束
4.編寫請求處理器類,在 springmvc.xml 中配置自動掃描的包,並為處理器類添加處理器標志注解


4.編寫視圖:index.jsp;在請求處理器類中通過 @RequestMapping(xxx) 的方式來映射請求的 URL;在 springmvc.xml 文件中配置視圖解析器



二、@RequestMapping 映射請求
1.@RequestMapping 既可以修飾類又可以修飾方法

若在類上使用了 @RequestMapping("/springmvc"),則對應 view 層的請求為:

2. @RequestMapping 的 value 和 method 屬性
① value 屬性:指定映射的 URL
② method 屬性: 指定映射的請求方式


3. @RequestMapping 的 params 和 headers 屬性 (了解即可,不常用)
① params 屬性:指定映射的請求參數
② headers 屬性: 指定映射的請求頭


4. @RequestMapping 的 Ant 風格的路徑,即使用通配符 (了解即可)


5. 補充: @PathVariable(xxx) 注解可以來映射 URL 中的占位符到目標方法的參數中


三、REST
1.簡介:即Representational State Transfer。(資源)表現層狀態轉化。是目前最流行的一種互聯網軟件架構。它結構清晰、符合標准、易於理解、擴展方便, 所以正得到越來越多網站的采用
2.HTTP協議里面,四個表示操作方式的動 詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET用來獲取資源,POST用來新建資源,PUT用來更新資源,DELETE用來刪除資源
3.以 CRUD 為例,演示 REST 風格 URL 的使用
1)在 web.xml 中配置 HiddenHttpMethodFilter 過濾器,此過濾器可以將 POST 請求轉換為 DELETE 或 PUT 請求

2)在 jsp 頁面中模擬發送 GET POST DELETE PUT 請求

3) 在請求處理器類中編寫 GET POST DELETE PUT 請求各自對應的方法,通過 @PathVariable 注解獲取請求的參數,即 id

四、 @RequestParam 注解 (重要,常用)
1.@RequestParam 注解可以在請求方法中獲取請求的參數

2.具體獲取:

五、@RequestHeader 注解 (了解)
1. 在請求方法中映射(獲取)請求頭的信息
2. 使用


六、@CookieValue 注解 (了解)
1.根據 Cookie 的 key 獲取 Cookie 的 value
2.使用


七、使用 POJO 對象綁定請求的參數 (POJO:普通的 Java 類) (常用)
1.構建 User 類和 Address 類,其中 User 類中包含 Address 對象
2.在 view 層構建表單 (index.jsp 中)

3.在請求控制器類中編寫請求方法

八、在處理器的方法中使用原生的 Servlet 的 API (常用)


九、處理模型數據
1. ModelAndView 作為處理器方法的返回值



2. 向目標方法添加 Map 類型的參數



3. @SessionAttributes 注解 (常用) 注:此注解只能放在類上,不能放在方法上
1)作用:① 通過屬性名指定需要放到會話中的屬性(使用 @SessionAttributes 注解的 value 屬性) ② 通過模型屬性的對象類型指定哪些模型屬性需要放到會話中(使用 @SessionAttributes 的 types 屬性)
2)演示;


4. @ModelAttribute 注解 (類似於 Struts2 中的 Preparable)
1)應用場景:只對一個對象的部分屬性進行修改,而不需要修改的屬性需要保持原樣不能為 null
2)具體使用及注意事項:

3)使用 @ModelAttribute 注解在 SpringMVC 中的源碼分析 (了解)

4)結論,需要記住

5)補充

十、視圖解析器及其流程的分析 (默認使用的是 InternalResourceView 視圖解析器)
1、 InternalResourceViewResolver 視圖解析流程

2.、 JstlView 視圖解析器 (若項目中使用了 JSTL,則 SpringMVC 會自動把視圖由 InternalResourceView轉為 JstlView)
使用 JSTL 的 fmt 標簽模擬國際化:
1)新建三個國際化資源文件



2)在 jsp 頁面中引入 jstl,使用 fmt 標簽


3)在 SpringMVC 的配置文件中配置國際化資源文件

3、mvc:view-controller 標簽:配置直接轉發的頁面,配置的路徑可以直接響轉發的頁面,而無需再經過 Handler 的目標方法

測試:在 url 中輸入:http://localhost:8888/springmvc-1/success (LZ 將 Tomcat 的端口號修改為了 8888)
注:使用此注解必須配置另一個注解:mvc:annotation-driven

4、 自定義視圖
1)創建視圖類,實現 View 接口,實現兩個方法

2)SpringMVC 配置文件中配置 BeanNameViewResolver 視圖解析器

3)測試:


5、重定向到目標頁面


十一、SpringMVC 的 CRUD 小案例
1.按照之前的步驟搭建 SpringMVC 的環境
2.注意點:
1)在 jsp 頁面中使用 SpringMVC 的 form 表單標簽:
jsp 頁面:


更正:上圖中應該是 form:radiobuttons 而不是 form:checkboxes
請求處理器類中:

2)SpringMVC 處理靜態資源文件

解決:

3)如何將 GET 請求轉換為 POST 請求,再轉化為 DELETE 請求
GET 請求:

GET ---> POST:

4)關於 _method ,將 POST 請求轉為 PUT 或 DELETE 請求

