您的位置:首页 > 编程语言 > Java开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: