javascript
深入浅出 SpringMVC - 2 提升篇
原創(chuàng)播客,如需轉(zhuǎn)載請(qǐng)注明出處。原文地址:http://www.cnblogs.com/crawl/p/7697738.html?
前言:
本篇筆記是繼?深入淺出 SpringMVC - 1?后的續(xù)篇,主要介紹了 SpringMVC 的實(shí)際小應(yīng)用,包括?SpringMVC 的數(shù)據(jù)格式化、使用 JSR 303 驗(yàn)證標(biāo)準(zhǔn)?在?SpringMVC 中進(jìn)行數(shù)據(jù)的校驗(yàn)、SpringMVC 結(jié)合 Ajax 在請(qǐng)求處理器中返回 JSON、SpringMVC 的國際化及國際化錯(cuò)誤消息的顯示、使用 SpringMVC 的進(jìn)行文件的上傳與下載、在 SpringMVC 中自定義攔截器、SpringMVC 中的異常處理、Spring 整合 SpringMVC?進(jìn)行了詳細(xì)的介紹。
筆記中提供了大量的代碼示例,需要說明的是,大部分代碼示例都是以圖片的形式展示的,所有的圖片都是來自本人所敲代碼的截圖,不足之處,請(qǐng)大家指正~
若有疑惑或者需要本系列分享中的資料工具,敬請(qǐng)聯(lián)系 qingqing_crawl@163.com
十二、數(shù)據(jù)的格式化
1. 時(shí)間日期格式化???時(shí)間日期的字符串 ---> Date 類型
1)在 SpringMVC 的配置文件中配置:<mvc:annotation-driven />?
2)在 JavaBean 的對(duì)應(yīng) Date 類型的屬性上添加?@DateTimeFormat(pattern="yyyy-MM-dd")?注解
2. 數(shù)值的格式化
1)在 SpringMVC 的配置文件中配置:<mvc:annotation-driven>?
2)在 JavaBean 的對(duì)應(yīng)數(shù)值類型的屬性上添加?@NumberFormat(pattern="#,###,###.#")?#代表數(shù)字
3. 獲取數(shù)據(jù)格式化出錯(cuò)信息:使用?BindingResult
十三、使用?JSR 303 驗(yàn)證標(biāo)準(zhǔn)?在 SpringMVC 中進(jìn)行數(shù)據(jù)的校驗(yàn)
1. 加入 Hibernate Validate 的 jar 包:hibernate-validator-5.0.0.CR2\dist 路徑下
加入hibernate-validator-5.0.0.CR2\dist\lib\required 目錄下的的出去 el 的另 3 個(gè) jar 包
2. 在 SpringMVC 的配置文件中配置?<mvc:annotation-driven />
3.在 JavaBean 對(duì)應(yīng)的屬性中添加所需的注解
4. 在?請(qǐng)求控制器對(duì)應(yīng)的方法中為 JavaBean 添加?@Valid 注解
5.出錯(cuò)之后頁面的去向
6.在 jsp 頁面顯示錯(cuò)誤信息
7. 定制和國際化錯(cuò)誤信息
1)創(chuàng)建國際化資源文件?i18n.properties
?
2) 在 SpringMVC 的配置文件中配合國際化資源文件
十四、SpringMVC 的請(qǐng)求處理器中返回 JSON
1. 導(dǎo)入 3 個(gè) jar 包:\jackson\SpringMVC_JSON 目錄下的(此目錄是樓主為了方便自定義的目錄~~,大家只需注意一下的 jar 包)
?
2. jsp 頁面創(chuàng)建測(cè)試連接,發(fā)送 Ajax
3.?請(qǐng)求處理器類的目標(biāo)方法 直接返回所需要的數(shù)組或集合,并為目標(biāo)方法添加?@ResponseBody?注解:
?
補(bǔ):HttpMessageConverter?的使用:
1.?@RequestBody?修飾入?yún)?/span>?????@ResponseBody?修飾方法??二者不必同時(shí)使用
1)模擬文件上傳操作:
① 表單準(zhǔn)備:
② 目標(biāo)方法
2.?HttpEntity<T>?修飾入?yún)?/strong>?和?ResponseEntity<T>?修飾返回值
1)使用?ResponseEntity<T>?模擬文件下載操作
十五、SpringMVC 的國際化
進(jìn)行國際化首先要配置?3 個(gè)國際化資源文件
?
然后在 SpringMVC 的配置文件中配置國際化資源文件
?
1. 在頁面上能夠根據(jù)瀏覽器語言設(shè)置的情況對(duì)文本(不是內(nèi)容), 時(shí)間, 數(shù)值進(jìn)行本地化處理 解決:?使用 JSTL 的 fmt 標(biāo)簽
1)i18n.jsp 中
2.如何在請(qǐng)求處理器類的目標(biāo)方法中獲取國際化資源文件 Locale 對(duì)應(yīng)的消息?解決:在請(qǐng)求處理器類中注入?ResourceBundleMessageSource?的實(shí)例, 使用其對(duì)應(yīng)的 getMessage 方法即可
3.通過超鏈接切換 Locale, 而不再依賴于瀏覽器的語言設(shè)置情況
1)jsp 頁面配置超鏈接
?
2)SpringMVC 的配置文件中配置?SessionLocaleResolver?和?LocaleChangeInterceptor?攔截器
?
十六、SpringMVC 的文件上傳與下載
1.SpringMVC 中的文件上傳依賴 apache-commons-fileupload 組件,所以要導(dǎo)入 jar 包 apache-commons\commons-fileupload-1.2.1\lib 下的第一個(gè) jar 包
2.apache-commons-fileupload?依賴于 commons-io?,所以導(dǎo)入 apache-commons\commons-io-2.0 下的 io 包
3.SpringMVC?的配置文件中配置 MultipartResolver
4.準(zhǔn)備文件上傳的表單
?
5.請(qǐng)求處理器中編寫目標(biāo)方法
?
補(bǔ):文件的下載見 十五 節(jié) 補(bǔ)充中的第 2 小節(jié)
十七、自定義攔截器
1. 如何定義?
1)創(chuàng)建一個(gè)攔截器類實(shí)現(xiàn)?HandlerInterceptor?接口,實(shí)現(xiàn)其中的方法
2)在 SpringMVC 配置文件中進(jìn)行配置
2. 自定義攔截器中的三個(gè)方法
3.攔截器的進(jìn)一步配置
十八、SpringMVC 中的異常處理
1.在 SpringMVC 的配置文件中配置?<mvc:annotation-driven />
2.模擬異常
3.@ExceptionHandler?注解標(biāo)注方法進(jìn)行異常的處理
4.?@ControllerAdvice?注解用來標(biāo)注異常處理類
5.?@ResponseStatus?既可以用來標(biāo)注自定義異常類,也可以標(biāo)注方法
1)自定義異常類
3)@ResponseStatus?修飾方法
6. 在 SpringMVC 中使用?SimpleMappingExceptionResolver?來映射異常
1)模擬數(shù)組下標(biāo)越界異常
2)在 SpringMVC 的配置文件中進(jìn)行映射異常
十九、Spring 整合 SpringMVC
1.是否需要整合?
1)需要: 通常情況下, 類似于數(shù)據(jù)源, 事務(wù), 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中).實(shí)際上放入 Spring 配置文件對(duì)應(yīng)的 IOC 容器中的還有 Service 和 Dao.
?2) 不需要: 都放在 SpringMVC 的配置文件中. 也可以分多個(gè) Spring 的配置文件, 然后使用 import 節(jié)點(diǎn)導(dǎo)入其他的配置文件
2.整合時(shí)常見問題及解決辦法
問題:若 Spring 的 IOC 容器和 SpringMVC 的 IOC 容器掃描的包有重合的部分, 就會(huì)導(dǎo)致有的 bean 會(huì)被創(chuàng)建 2 次.
解決:
1) 使 Spring 的 IOC 容器掃描的包和 SpringMVC 的 IOC 容器掃描的包沒有重合的部分. (不方便實(shí)現(xiàn))
2.)可以使用?exclude-filter 和 include-filter?子節(jié)點(diǎn)來規(guī)定只能掃描的注解?
3.SpringIOC 容器和 SpringMVC IOC 容器的關(guān)系
SpringMVC?的 IOC 容器中的 bean 可以來引用 Spring IOC 容器中的 bean.反之則不行. Spring IOC 容器中的 bean 卻不能來引用 SpringMVC IOC 容器中的 bean!
?
轉(zhuǎn)載于:https://www.cnblogs.com/crawl/p/7697738.html
總結(jié)
以上是生活随笔為你收集整理的深入浅出 SpringMVC - 2 提升篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django REST Framewor
- 下一篇: android studio gradl