前言:

  本篇笔记是继 深入浅出 SpringMVC - 1 后的续篇,主要介绍了 SpringMVC 的实际小应用,包括 SpringMVC 的数据格式化、使用 JSR 303 验证标准 在 SpringMVC 中进行数据的校验、SpringMVC 结合 Ajax 在请求处理器中返回 JSON、SpringMVC 的国际化及国际化错误消息的显示、使用 SpringMVC 的进行文件的上传与下载、在 SpringMVC 中自定义拦截器、SpringMVC 中的异常处理、Spring 整合 SpringMVC 进行了详细的介绍。

  笔记中提供了大量的代码示例,需要说明的是,大部分代码示例都是以图片的形式展示的,所有的图片都是来自本人所敲代码的截图,不足之处,请大家指正~

  若有疑惑或者需要本系列分享中的资料工具,敬请联系 qingqing_crawl@163.com

十二、数据的格式化

1. 时间日期格式化   时间日期的字符串 ---> Date 类型

1)在 SpringMVC 的配置文件中配置:<mvc:annotation-driven /> 

2)在 JavaBean 的对应 Date 类型的属性上添加 @DateTimeFormat(pattern="yyyy-MM-dd") 注解

2. 数值的格式化

1)在 SpringMVC 的配置文件中配置:<mvc:annotation-driven> 

2)在 JavaBean 的对应数值类型的属性上添加 @NumberFormat(pattern="#,###,###.#") #代表数字

3. 获取数据格式化出错信息:使用 BindingResult

十三、使用 JSR 303 验证标准 在 SpringMVC 中进行数据的校验

1. 加入 Hibernate Validate 的 jar 包:hibernate-validator-5.0.0.CR2\dist 路径下

加入hibernate-validator-5.0.0.CR2\dist\lib\required 目录下的的出去 el 的另 3 个 jar 包

2. 在 SpringMVC 的配置文件中配置 <mvc:annotation-driven />

3.在 JavaBean 对应的属性中添加所需的注解

4. 在 请求控制器对应的方法中为 JavaBean 添加 @Valid 注解

5.出错之后页面的去向

6.在 jsp 页面显示错误信息

7. 定制和国际化错误信息

1)创建国际化资源文件 i18n.properties

2) 在 SpringMVC 的配置文件中配合国际化资源文件

十四、SpringMVC 的请求处理器中返回 JSON

1. 导入 3 个 jar 包:\jackson\SpringMVC_JSON 目录下的(此目录是LZ为了方便自定义的目录~~,大家只需注意一下的 jar 包)

2. jsp 页面创建测试连接,发送 Ajax

3. 请求处理器类的目标方法 直接返回所需要的数组或集合,并为目标方法添加 @ResponseBody 注解:

补:HttpMessageConverter 的使用:

1. @RequestBody 修饰入参     @ResponseBody 修饰方法  二者不必同时使用

1)模拟文件上传操作:

① 表单准备:

② 目标方法

2. HttpEntity<T> 修饰入参 和 ResponseEntity<T> 修饰返回值

1)使用 ResponseEntity<T> 模拟文件下载操作

十五、SpringMVC 的国际化

进行国际化首先要配置 3 个国际化资源文件

然后在 SpringMVC 的配置文件中配置国际化资源文件

1. 在页面上能够根据浏览器语言设置的情况对文本(不是内容), 时间, 数值进行本地化处理 解决: 使用 JSTL 的 fmt 标签

1)i18n.jsp 中

2.如何在请求处理器类的目标方法中获取国际化资源文件 Locale 对应的消息 解决:在请求处理器类中注入 ResourceBundleMessageSource 的实例, 使用其对应的 getMessage 方法即可

3.通过超链接切换 Locale, 而不再依赖于浏览器的语言设置情况

1)jsp 页面配置超链接

2)SpringMVC 的配置文件中配置 SessionLocaleResolver 和 LocaleChangeInterceptor 拦截器

十六、SpringMVC 的文件上传与下载

1.SpringMVC 中的文件上传依赖 apache-commons-fileupload 组件,所以要导入 jar 包 apache-commons\commons-fileupload-1.2.1\lib 下的第一个 jar 包

2.apache-commons-fileupload 依赖于 commons-io ,所以导入 apache-commons\commons-io-2.0 下的 io 包

3.SpringMVC 的配置文件中配置 MultipartResolver

4.准备文件上传的表单

5.请求处理器中编写目标方法

补:文件的下载见 十五 节 补充中的第 2 小节

十七、自定义拦截器

1. 如何定义?

1)创建一个拦截器类实现 HandlerInterceptor 接口,实现其中的方法

2)在 SpringMVC 配置文件中进行配置

2. 自定义拦截器中的三个方法

3.拦截器的进一步配置

十八、SpringMVC 中的异常处理

1.在 SpringMVC 的配置文件中配置 <mvc:annotation-driven />

2.模拟异常

3.@ExceptionHandler 注解标注方法进行异常的处理

4. @ControllerAdvice 注解用来标注异常处理类

5. @ResponseStatus 既可以用来标注自定义异常类,也可以标注方法

1)自定义异常类

3)@ResponseStatus 修饰方法

6. 在 SpringMVC 中使用 SimpleMappingExceptionResolver 来映射异常

1)模拟数组下标越界异常

2)在 SpringMVC 的配置文件中进行映射异常

十九、Spring 整合 SpringMVC

1.是否需要整合?

1)需要: 通常情况下, 类似于数据源, 事务, 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中).实际上放入 Spring 配置文件对应的 IOC 容器中的还有 Service 和 Dao.

2) 不需要: 都放在 SpringMVC 的配置文件中. 也可以分多个 Spring 的配置文件, 然后使用 import 节点导入其他的配置文件

2.整合时常见问题及解决办法

问题:若 Spring 的 IOC 容器和 SpringMVC 的 IOC 容器扫描的包有重合的部分, 就会导致有的 bean 会被创建 2 次.

解决:

1) 使 Spring 的 IOC 容器扫描的包和 SpringMVC 的 IOC 容器扫描的包没有重合的部分. (不方便实现)

2.)可以使用 exclude-filter 和 include-filter 子节点来规定只能扫描的注解 

3.SpringIOC 容器和 SpringMVC IOC 容器的关系

SpringMVC 的 IOC 容器中的 bean 可以来引用 Spring IOC 容器中的 bean.反之则不行. Spring IOC 容器中的 bean 却不能来引用 SpringMVC IOC 容器中的 bean!

深入浅出 SpringMVC - 2 提升篇的更多相关文章

  1. Spring框架系列(5) - 深入浅出SpringMVC请求流程和案例

    前文我们介绍了Spring框架和Spring框架中最为重要的两个技术点(IOC和AOP),那我们如何更好的构建上层的应用呢(比如web 应用),这便是SpringMVC:Spring MVC是Spri ...

  2. C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析

    前景提要: 编写程序时,也许你不经意间,就不知不觉的使程序代码,发生了装箱和拆箱,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候,减少装箱和拆 ...

  3. C# 程序性能提升篇-2、类型(字段类型、class和struct)的错误定义所影响性能浅析

    前景提要: 编写程序时,也许你不经意间,就不知不觉的定义了错误的类型,从而发生了额外的性能消耗,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候 ...

  4. Java提升篇之反射的原理(二)

    Java提升篇之通过反射越过泛型检查 /* *问题:在一个ArrayList<Integer>对象中,在这个集合中添加一个字符串. */ 在我们还没有学反射前,遇到这个问题都是无法实现的, ...

  5. Java提升篇之反射的原理

    Java提升篇之反射的原理 1.构造方法的反射 import java.lang.reflect.Constructor; public class ReflectConstructor { publ ...

  6. 大数据系列博客之 --- 深入简出 Shell 脚本语言(提升篇)

    首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ...

  7. 一起学SpringMVC之入门篇

    本文属于SpringMVC的入门篇,属于基础知识,仅供学习分享使用,如有不足之处,还请指正. 什么是SpringMVC ? SpringMVC是一个基于Spring的MVC框架,继承了Spring的优 ...

  8. 深入浅出 RPC - 浅出篇+深入篇

    摘自: http://blog.csdn.net/mindfloating/article/details/39473807 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 ...

  9. 深入浅出RPC——浅出篇 深入篇

    本文转载自这里是原文 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用. 在平时的日常开发中我们都在隐式或显式的使用 RPC,一些刚入行的程序 ...

随机推荐

  1. 团队作业8----第二次项目冲刺(Beta阶段) 第七天

    BETA阶段冲刺第六天 1.小会议ing 2.每个人的工作 (1)昨天已完成的工作 完成查重部分  (2) 今天计划完成的工作 (3) 工作中遇到的困难: 尤少辉:在测试的时候发现了,文件名保存到数据 ...

  2. 201521123073 《Java程序设计》第7周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: ...

  3. java课程设计(团队)-五子棋

    单机五子棋小游戏 一:团队介绍 组长:网络1511,毛卓 组员:网络1511,朱潞潞 组员:网络1511,范阳斌 二:项目git提交记录截图 三:项目使用主要技术 netBeans,GUI 四:项目特 ...

  4. 201521123028 《Java程序设计》第11周学习总结

    1. 本周学习总结 关于互斥同步访问 synchronized关键字 -wait.notify和notifyAll Lock和Condition方法 -condition.await() //类似ob ...

  5. Thinkphp3.2结合phpqrcode生成二维码(含Logo的二维码),附案例

    首先,下载phpqrcode,将其解压到项目ThinkPHP\Library\Vendor目录下.Index_index.html(模板可自行配置) <form action="{:U ...

  6. 纳税服务系统【用户模块之使用POI导入excel、导出excel】

    前言 再次回到我们的用户模块上,我们发现还有两个功能没有完成: 对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的.但是呢,在Java中操作excel是相对常用的,因此也有组件供我 ...

  7. Jquery第三篇【AJAX 相关的API】

    前言 前面我们已经学了讲解了Jquery的选择器,关于DOM 的API还有事件的API.本博文需要讲解Jquery对AJAX的支持- 我们在开始使用JavaScript学习AJAX的时候,创建异步对象 ...

  8. JS表单对象和图片对象--JavaScript基础

    1.表单对象 1)访问者输入正确的密码才可进入网站 HTML DOM prompt() 方法,prompt() 方法用于显示可提示用户进行输入的对话框.prompt(text,defaultText) ...

  9. Django(博客系统):按照时间分层筛选“/blog/article/?create_time__year=2017”,出现问题:Database returned an invalid datetime value. Are time zone definitions for your database installed?

    问题背景 添加文章时间没问题,但为了设定博客文章按照时间分层筛选(创建时间的年份.年月&月份来搜索文章),我在blog这个django app的admin.py的ArticleAdmin类中做 ...

  10. Java 中的语法糖

    百度百科对语法糖的定义 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这 ...