SpringMVC基础-模型和视图ModelAndView
2015-09-05 12:19
633 查看
1.View视图
这里的视图就是MVC中的V,在SpringMVC中View表示一切视图资源的抽象.视图具体可以是:一个静态html文件,jsp文件,XML文件,pdf文件.
为了表示这些具体的视图资源,SpringMVC实现了不同的视图实现类,
每一个具体的视图实现类表示了具体的一种视图资源.例如JstlView表示JSP.
View(interface)
render(model, request, response)//渲染视图
AbstractView
AbstractUrlBasedView
InternalResourceView
JstlView
AbstractTemplateView//模板渲染视图抽象类
VelocityView
FreeMarkerView
2.Model(实际上就是Map)
Model指的是MVC中的M,也就是数据模型,说白了就是Java对象,这些Java对象存储了数据信息,表示了数据,例如从数据库查询出来的数据,或者是解析表单得到的数据存储到Java对象中.我们可以这样理解数据模型:用Web的角度来说,web中的所有东西都是一种资源,但是一种
资源有多种表现形式,数据可以用一个Js对象表示,也可以用二进制表示,也可以是Json对象,XML表示,在后台可以是Java Pojo对象,放在
关系型数据库中就是一个表中的一行数据.在Web中,我们经常要在不同的层之间进行数据交互,例如要把前端的表单信息提交到后台,我们
通过ajax把表单信息分装成Json,Java后台接收Json后转换成Java对象,然后Java通过Sql把Java对象最终转换成数据库的一列.
Model
ModelMap(extends LinkedHashMap)
ExtendedModelMap(extends ModelMap implements Model)
3.ViewResolver(471)
前面提到了View和Model,需要注意的是,View和Model只是Java可以识别的视图和模型,我们需要把视图转换成可以让客户端,也就是浏览器可以识别的视图资源,也就是说,View和Model现在还只是Java类对象,浏览器无法解析并显示给客户看.所以我们需要一种工具把View和Model
转成浏览器识别的视图资源,是的,就是html,XML这样的文件.
ViewResolver的作用就是把Model结合View把视图文件渲染出来.然后交给服务器通过HTTP协议,返回给浏览器渲染并显示,这样用户
就可以通过浏览器看到我们熟悉的网页啦!
ViewResolver
View resolveViewName(String viewName, Locale locale)
AbstractCachingViewResolver
这种视图解析器会把它曾经解析过的视图保存起来,然后每次要解析视图的时候先从缓存里面找,如果找到了对应的视图就直接返回,
如果没有就创建一个新的视图对象,然后把它放到一个用于缓存的map中,接着再把新建的视图返回
XmlViewResolver
继承自AbstractCachingViewResolver抽象类,所以它也是支持视图缓存的。XmlViewResolver需要给定一个xml配置文件,该文件将使用和
Spring的bean工厂配置文件一样的DTD定义,所以其实该文件就是用来定义视图的bean对象的。在该文件中定义的每一个视图的bean对象都
给定一个名字,然后XmlViewResolver将根据Controller处理器方法返回的逻辑视图名称到XmlViewResolver指定的配置文件中寻找对应名称
的视图bean用于处理视图。该配置文件默认是/WEB-INF/views.xml文件,如果不使用默认值的时候可以在XmlViewResolver的location属性中
指定它的位置。
ResourceBundleViewResolver
继承自AbstractCachingViewResolver,但是它缓存的不是视图,和XmlViewResolver一样它也需要有一个配置文件来定义逻辑视图名称和真
正的View对象的对应关系,不同的是ResourceBundleViewResolver的配置文件是一个属性文件,而且必须是放在classpath路径下面的,默认
情况下这个配置文件是在classpath根目录下的views.properties文件,如果不使用默认值的话,则可以通过属性baseName或baseNames来指定。
baseName只是指定一个基名称,Spring会在指定的classpath根目录下寻找以指定的baseName开始的属性文件进行View解析,
UrlBasedViewResolver
继承了AbstractCachingViewResolver,主要就是提供的一种拼接URL的方式来解析视图,它可以让我们通过prefix属性指定一个指定的前缀,
通过suffix属性指定一个指定的后缀,然后把返回的逻辑视图名称加上指定的前缀和后缀就是指定的视图URL了。
InternalResourceViewResolver
RLBasedViewResolver的子类,InternalResourceViewResolver会把返回的视图名称都解析为InternalResourceView对象,InternalResourceView会把
Controller处理器方法返回的模型属性都存放到对应的request属性中,然后通过RequestDispatcher在服务器端把请求forword重定向到目标URL。
VelocityViewResolver/FreeMarkerViewResolver
这两个视图解析器都是UrlBasedViewResolver的子类。FreeMarkerViewResolver会把Controller处理方法返回的逻辑视图解析为FreeMarkerView,
而VolocityViewResolver会把返回的逻辑视图解析为VolocityView
ContentNegotiatingViewResolver
*视图解链
在SpringMVC中可以同时定义多个ViewResolver视图解析器,然后它们会组成一个ViewResolver链。当Controller处理器方法返回一个逻辑
视图名称后,ViewResolver链将根据其中ViewResolver的优先级来进行处理。所有的ViewResolver都实现了Ordered接口,在Spring中实现
了这个接口的类都是可以排序的。在ViewResolver中是通过order属性来指定顺序的,默认都是最大值。所以我们可以通过指定ViewResolver
的order属性来实现ViewResolver的优先级,order属性是Integer类型,order越小,对应的ViewResolver将有越高的解析视图的权利,所以
第一个进行解析的将是ViewResolver链中order值最小的那个。
4.ModelAndView
顾名思义就是模型和视图,概念和我们前面提到的一样.它有两个属性,一个是view,一个是model.也就是Model和View的封装.
private Object view;
private ModelMap model;
相关链接
http://haohaoxuexi.iteye.com/blog/1770554 http://www.mkyong.com/tutorials/spring-mvc-tutorials
相关文章推荐
- java整型byte,short,int,long取值范围大小
- java_自定义异常、打包、自定义模块模式、
- Java collections小知识收集
- playframework简单入门
- java实习--json格式串记录
- Java Filter(拦截器)
- HashMap源码分析
- JAVA学习——多线程
- Java类中各成员及函数方法的执行顺序
- 用Java语言编写一个金字塔程序
- Java中隔离容器的实现
- JAVA注解
- Java设计模式-1-概述
- Java 解析chm文件实战(原创)
- Eclipse集成javah
- A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C();
- java -ArrayList的用法实例--学生宿舍管理系统
- 深入java--JRE与JDK的区别
- 关于spring配置两个sessionFactory的配置与注意事项
- java设计模式之单例模式