2,spring MVC的注解驱动控制器,rest风格的支持

  作为spring mvc的明星级别的功能,无疑是使得自己的code比较优雅的秘密武器;

  • @RequestMapping处理用户的请求,下面对它的参数给点简单的说明,每个参数可以同时使用,他们之间是与的关系

    参数名 意义 补充说明
    value url的全称 支持ant风格和占位符(入参中使用@PathVariable取得占位符的数据),实现REST风格的关键
    param 请求参数 限定参数名称
    method 请求方法 最佳实践是get方法获得页面,post方法执行更新操作
    header 请求头 限定请求的资源类型
  •   请求方法的签名,方法的签名主要包括方法上的注解,入参的注解,入参的类型,返回值的类型
    输入参数 说明 补充
    @RequestParam 指定参数名 有value(参数名),required(是否必须),defaul(默认值)t三个属性
    @CookieValue 绑定请求中的cookie值 比如sessionId,也有同上的三个属性
    @RequestHeader 绑定请求报文头的数据 比如content-type
    实体对象(命令/表单对象) 绑定表单的对象 通常是一个pojo类,可以级联的指定属性
    Servlet的api 支持原生的servlet api HttpServletRequest,HttpSession,WebRequest
    io流 InputStream,OutputStream,Reader,Writer 实际对应Request,response获取的流
    Local,Principal 通过Request对象获得 设置本地化信息
  •   从数据经过了入参之后,使用类型转换 HttpMessageConverter<T>,spring MVC默认的类型转换器位于org.springframework.http.converter包中,如图所示(除了Abstract*的类型都是默认自带的),供AnnotationMethodHandlerAdapter使用,默认安装的类型转换器如图,如果要使用其它的,在配置文件中进行配置,配置方法是自定义一个bean,类型是:AnnotationMethodHandlerAdapter,指定属性messageConverters,可以通过两种方式使用,

使用方式 位置 补充
@RequestBody /@ResponseBody 处理方法进行标注 访问报文体的数据
HttpEntity<T> / ResponseEntity<T> 作为处理方法的入参或者返回值 还可访问报文头的数据

需要注意的几点:

1,只有上面的两种方式之一,才调用注册的HttpMessageConverter对请求和响应消息进行处理

2,根据请求的Accept属性选择匹配的转换器

3,不许成对出现,两种方式等效

可以通过声明相应的转换器来处理xml和json数据

处理模型数据:模型数据是spring mvc的核心,控制器处理之后是为了得到模型数据,视图获取模型数据进行渲染呈现给用户;

spring提供的输出模型数据的途径:

途径 说明 补充
ModelAndView 可在模型中添加数据 最终的模型
Model 或者Map map中的数据在返回时会添加到数据模型中  
@ModelAttribute 入参的对象会放到数据模型中 在方法级别和入参上添加,先获取方法级别上的数据,然后再执行入参级别的
@SessionAttribute 多个请求可以共享指定的属性 可通过属性名称湖综合属性的类型指定内容

3,spring MVC的类型转换,格式转化,输入校验

在请求的数据到达入参之前,spring mvc还完成比较多的工作,主要是类型转换,格式转化,输入校验这三类工作,先看看核心流程

核心是DataBinder,conversionService完成类型转换和格式转化的工作,validator完成输入校验的工作

数据转换接口格式转换接口,ConversionService ,通过ConversionServiceFactoryBean在spring中自定义转换器,如果内置的不够用,

自定义可以扩展Coverter<S,T>或者GenericConverter,ConverterFactory;

也可通过@InitBinder来定义单个Contoller专用的类型转换器

或者扩展WebBindingInitializer来指定全局的类型转换器,在AnnotationMethodHandlerAdapter中指定;这里略去;

数据格式化关键接口Formatter<T>,注解驱动格式化的重要接口AnnotationFormateFactory,如图,来指定格式化

内置了对日期和数字的格式转化。

输入校验:spring mvc拥有自己的数据校验框架,同时支持jsr303标准校验框架,但是spring并没有提供jsr303的具体实现,hibernate validator实现了该标准,可以通过引用这个来支持jsr303的校验,

获取校验结果:通过在入参中定一个参数BindingResult即可获得,页面通过spring的标签 <form:errors path="*"/>来显示输入校验的结果;

国际化输入校验结果:略

//todo

4,spring MVC的视图

5,spring MVC的本地化解析,文件上传,静态资源处理,拦截器,异常处理等

6,小结

spring笔记2 spring MVC的基础知识2的更多相关文章

  1. 《Programming Hive》读书笔记(两)Hive基础知识

    <Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...

  2. tensorflow笔记(一)之基础知识

    tensorflow笔记(一)之基础知识 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7399701.html 前言 这篇no ...

  3. php面试笔记(5)-php基础知识-自定义函数及内部函数考点

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...

  4. php面试笔记(3)-php基础知识-运算符

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而运算符相关的考 ...

  5. spring笔记3 spring MVC的基础知识3

    4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...

  6. Spring笔记(4) - Spring的编程式事务和声明式事务详解

    一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作 ...

  7. Spring笔记1——Spring起源及其核心技术

    Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控 ...

  8. php面试笔记(2)-php基础知识-常量和数据类型

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 面试是每一个PHP初学者到PHP程序员必不可少的一步,冷 ...

  9. Spring笔记(6) - Spring的BeanFactoryPostProcessor探究

    一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...

  10. Spring笔记(7) - Spring的事件和监听机制

    一.背景 事件机制作为一种编程机制,在很多开发语言中都提供了支持,同时许多开源框架的设计中都使用了事件机制,比如SpringFramework. 在 Java 语言中,Java 的事件机制参与者有3种 ...

随机推荐

  1. 哪些JavaScript IDE最好用?

    阅读本文之前,分享大家一张图片,看图会发现JavaScript开发需求最高,占比达到42.84%,因此掌握JavaScript语言好工作就不愁啦,工欲善其事必先利其器,那么选择IDE来开发是至关重要的 ...

  2. Linux应用总结(1):自动删除n天前日志

    linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...

  3. Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结

    Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结 1.1. 原理,主要使用像素模糊后的差别会变小1 1.2. 具体流程1 1.3. 提升性能 可以使用采样法即可..1 ...

  4. 《鸟哥的linux私房菜》 - linux命令温故而知新

    在公司的某角落里,看到了<鸟哥的linux私房菜>,顿时想看看是什么鬼. 其他时候还要自己去买才有,现在正好,比图书馆方便.看完了,写点啥! 编辑器很重要,一个vim就主要是我的使用方向: ...

  5. Visual Studio 2015 Bowser Link的功能不停的向服务端发送请求

    Visual Studio 2015新建的mvc项目 默认在每个视图上生成一些JavaScript脚本

  6. 每天一个linux命令(37):date命令

    在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...

  7. 每天一个linux命令(8):cp 命令

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...

  8. EasyUI分页索引不能输入非数字

    //分页索引不能输入非数字 function PagerCheck() { $(".pagination-num").keydown(function (event) { even ...

  9. HTML基础笔记-01

    ---恢复内容开始--- 学习网站:W3School 1.基础知识 目录: <1.我的文档—> 选择目录名—> 主页—> 样式(点击标题样式,选择你想要的每个标题,重复此步骤) ...

  10. KendoUI系列:Window

    1.基本使用 <link href="@Url.Content("~/Content/kendo/2014.1.318/kendo.common.min.css") ...