前言:

  本篇笔记是继 深入浅出 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. 【Alpha阶段】第六次scrum meeting

    一.会议照片 二.会议内容 姓名 学号 负责模块 昨日任务完成度 今日任务 杨爱清 099 界面设计和交互功能 完成 设计界面 杨立鑫 100 数据库搭建和其他 完成 将数据库与其他模块连接 林 钊 ...

  2. LaTeX排版指南

    V0.0.1 工具链 CTeX:http://www.ctex.org/HomePage ,CTeX是一个中文套装,但也同时发布一个独立的ctex宏包 TeXLive:https://tug.org/ ...

  3. 201521123005《java程序设计》第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 接口 有点类似继承中父类与子类的关系 方法声明和常量值的集合 对行为的抽象 一种 ...

  4. 201521123121 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 1.两类传输协议:TCP:UDP TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层 ...

  5. 201521123012 《Java程序设计》第十四周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 1.1建立数据库,将自己的姓名.学号作为一条记录插入.(截图, ...

  6. expect实现scp/ssh-copy-id非交互

    expect工具可以实现自动应答,从而达到非交互的目的. expect具体使用用法比较复杂,中文手册我正在翻译中,以后翻译完了做了整理再补.本文只有几个ssh相关最可能用上的示例. yum -y in ...

  7. php memcache 扩展 php -m 与 phpinfo() 不同

    事情起因,因要升级 openssl(openssl升级这里不表) ,所以在升级后对 php 也进行了从新编译,编译成功. 发现没有安装,memcache 扩展,从新编译安装了一下,显示的安装成功,但是 ...

  8. JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】

    1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ...

  9. 从JS和jQuery浅谈DOM操作,当我们在获取时,究竟获取了什么

    0.写在前面的话 自己对前端的东西一直不是很熟,现在开始要想办法从前端各个地方去获取想要的属性值的时候,也基本是在网上现炒现卖,几周下来,发现自己还是迷迷糊糊,可以算是一无所获. 所以就抽时间,把这一 ...

  10. window、linux系统与linux服务器之间使用svn同步及自动部署代码的方法

    摘要: 在家用PC,在公司用办公电脑对一个项目的代码进行修改时,会遇到代码同步的问题.本文讲解了代码同步及自动部署的解决办法. 实现方法: 1.首先在linux服务器上和linux上安装svn(sud ...