`
prodream
  • 浏览: 102466 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ModelAndView解析

阅读更多

查看spring的帮助文档得到以下信息:

org.springframework.web.servlet
Class ModelAndView

java.lang.Object
  extended by org.springframework.web.servlet.ModelAndView

public class ModelAndView
extends Object

Holder for both Model and View in the web MVC framework. Note that these are entirely distinct. This class merely holds both to make it possible for a controller to return both model and view in a single return value.

Class to represent a model and view returned by a handler used by a DispatcherServlet. The view can take the form of a reference to a View object, or a String view name which will need to be resolved by a ViewResolver object. The model is a Map, allowing the use of multiple data objects keyed by name.

Author:
Rod Johnson, Juergen Hoeller
See Also:
DispatcherServlet, ViewResolver, HandlerAdapter.handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object), Controller.handleRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

<!-- ======== CONSTRUCTOR SUMMARY ======== --><!-- -->

Constructor Summary
ModelAndView()
Default constructor for bean-style usage: populating bean properties instead of passing in constructor arguments.
ModelAndView(StringviewName)
Convenient constructor when there is no model data to expose.
ModelAndView(StringviewName, Mapmodel)
Creates new ModelAndView given a view name and a model.
ModelAndView(StringviewName, StringmodelName, ObjectmodelObject)
Convenient constructor to take a single model object.
ModelAndView(Viewview)
Convenient constructor when there is no model data to expose.
ModelAndView(Viewview, Mapmodel)
Creates new ModelAndView given a View object and a model.
ModelAndView(Viewview, StringmodelName, ObjectmodelObject)
Convenient constructor to take a single model object.
<!-- ========== METHOD SUMMARY =========== --><!-- --> Method Summary
ModelAndView addAllObjects(MapmodelMap)
Add all entries contained in the provided map to the model.
ModelAndView addObject(StringmodelName, ObjectmodelObject)
Add an object to the model.
void clear()
Clear the state of this ModelAndView object.
Map getModel()
Return the model map.
protected Map getModelInternal()
Return the model map.
View getView()
Return the View object, or null if we are using a view name to be resolved by the DispatcherServlet via a ViewResolver.
String getViewName()
Return the view name to be resolved by the DispatcherServlet via a ViewResolver, or null if we are using a View object.
boolean isEmpty()
Return whether this ModelAndView object is empty, i.e. whether it does not hold any view and does not contain a model.
boolean isReference()
Return whether we use a view reference, i.e. true if the view has been specified via a name to be resolved by the DispatcherServlet via a ViewResolver.
void setView(Viewview)
Set a View object for this ModelAndView.
void setViewName(StringviewName)
Set a view name for this ModelAndView, to be resolved by the DispatcherServlet via a ViewResolver.
String toString()
Return diagnostic information about this model and view.

收集自其他网页:

ModelAndView 类别就如其名称所示,是代表了Spring Web MVC程式中呈现画面时所使用Model资料物件与View资料物件,由于Java程式中一次只能返回一个物件,所以ModelAndView的作用封装这两个物件,以方便您一次返回Model与View这两个物件。

最简单的ModelAndView是持有View的名称返回,之后View名称被View resolver,也就是实作org.springframework.web.servlet.View介面的实例解析,例如 InternalResourceView或JstlView等等,最简单的ModelAndView建构方式如下:

ModelAndView(String viewName)


如果您要返回呈现画面时所需的Model资料物件,则可以使用Map物件来收集呈现资料时所需的资料,然后在建构ModelAndView作为建构时的引数,您可以使用下面这个版本的ModelAndView建构方法:

ModelAndView(String viewName, Map model)


Map物件中设定好键(Key)与值(Value),之后可以在要呈现的画面中取出加以显示(例如在JSP网页中),如果您要返回一个Model资料物件并指定Model的名称,则可以使用下面这个ModelAndView版本:

ModelAndView(String viewName, String modelName, Object modelObject)


藉由modelName,您可以在要View的实作类别中取出Model资料物件,并根据View所使用的技术来加以显示(可能是JSP网页、Pdf等呈现技术)。

ModelAndView类别也提供实作View介面的物件来作为建构时的引数,以下是三个可用的建构方法版本:

ModelAndView(View view)
ModelAndView(View view, Map model)
ModelAndView(View view, String modelName, Object modelObject)


一个实作View的实例例是org.springframework.web.servlet.view.RedirectView, ModelAndView预设是使用转发(Forward)方式来完成请求的结果画面,使用RedirectView的话,则会使用重新导向(Redirect)将请求重导至指定的结果画面位置,以呈现请求的结果,例如:

...
public ModelAndView handleRequest(....) ... {
...
return new ModelAndView(
new RedirectView(this.getViewPage()));
}
...


在这边,viewPage所设定的位址要是从伺服器网页根目录开始指定,而不是Web应用程式的根目录,所以您的getViewPage()传回的位址必须像是/FirstSpringMVC/pages/index.htm这样的位址,其中FirstSpringMVC是您的Web应用程式目录。

使用转发(Forward)方式的话,网址列上并不会出现被转发的目标位址,而且转发方式是在Web应用程式之内进行,可以访问Web应用程式所设定的内部目录,像是WEB-INF目录,因而您可以将一些要控管存取的资源放到WEB-INF下,如此使用者就无法直接请求这些资源,而必须透过 DispatcherServlet与Controller的处理与控管,才可以取得这些资源,转发方式只能在Web应用程式中进行,不能指定至其它的 Web应用程式位址。

使用重新导向(Redirect)的话,Web应用程式会要求客户端浏览器重新发出一个所指定的请求位址,也就是实际上相当于客户端重新连接至一个所指定的位址,因此浏览器的位址列上会出现被重新导向的资讯,重新导向的请求是由浏览器发出,所以不能访问Web应用程式中的隐藏目录,像是WEB-INF,重新导向是重新要求一个网页,所以可以指定至其它的Web应用程式位址。

DispatcherServlet会根据传回的ModelAndView来解析View名称,并处理给予的Model。

View名称的解析是委托给实作org.springframework.web.servlet.ViewResolver介面的实例,ViewResolver介面定义如下:

public interface ViewResolver { public view resolveViewName( String , Locale locale) throws ServletException; }

ViewResolver的一个实例是InternalResourceViewResolver,名称解析完之后,实际的View绘制与Model转换处理是交给实作org.springframework.web.servlet.View的实例,View介面如下:

public interface View { public void render(Map model, HttpServletResquest resquest, HttpServletResponse response) throws ServletException, IOException; }

View的实作之前用过org.springframework.web.servlet.view.InternalResourceView,另外也还有JstlView、TilesView、VelocityView等等的实作,分别进行不同的表现展处理。

分享到:
评论

相关推荐

    SSM框架测试题以及答案解析.docx

    下列关于ModelAndView的说法错误的是( )。 (选择一项) A:控制器处理方法的返回值若为: ModelAndView,则既可以包含视图信息,也可以包含模型数据 信息 B:控制器处理方法的返回值若为: ModelAndView, 在处理方法的...

    SpringMVC工作原理.docx

    SpringMVC流程 ...8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。 9、 ViewReslover解析后返回具体View。 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

    springmvc处理模型数据ModelAndView过程详解

    主要介绍了springmvc处理模型数据ModelAndView过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    springmvc开发资料

    8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。 9、 ViewReslover解析后返回具体View。 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 11、 DispatcherServlet...

    Spring ModeAndView

     最简单的ModelAndView是持有View的名称返回,之后View名称被view resolver,也就是实作org.springframework.web.servlet.View接口的实例解析,例如InternalResourceView或JstlView等等: ModelAndView...

    Web框架-spring

    Spring的web框架包括可配置的处理器(handler)映射、视图(view)解析、本地化(local)解析、主题(theme)解析以及对上传文件解析。处理器是对Controller接口的实现,该接口仅仅定义了ModelAndView handleRequest...

    java spring mvc

    5)Spring MVC处理流程 a.... d.ModelAndView里包含了响应View和数据信息,主控制器调用ViewResolver视图解析器根据ModelAndView的内容寻找View组件,生成响应 e.主控制器将响应内容给客户浏览器输出

    SSM+MAVEN+MYSQL框架整合原理+源码

    3.在控制层调用业务逻辑层(service),数据持久层(DAO)返回控制层,请求完成获取一个结果,设置一个要跳转的视图,(ModelAndView装载并传输数据,设置视图) 4.核心控制器调用 视图解析器:ViewResolver解析...

    Spring SpringMVC 简单整合

    8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。 9、 ViewReslover解析后返回具体View。 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 11、 DispatcherServlet...

    sprigmvc图文总结

    视图解析器(ViewResovler):进行视图解析,返回view对象(常见的有JSP,FreeMark等)。 流程 1、用户发送请求到前端控制器(DispatcherServlet)。 2、前端控制器请求处理器映射器(HandlerMapping)去查找处理器...

    简单的SSM.txt

    Springmvc就是spring框架的一个模块,所以它可以和spring框架可以进行无缝整合,它是一个...5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图 6. 视图负责将结果显示到客户端

    Spring MVC 学习笔记

    5、 ModelAndView的逻辑视图名交给ViewResolver解析器, ViewResolver解析器把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术; 6、 View会根据传进来的Model模型数据进行渲染,此处的...

    Spring面试题

    spring面试题 一、spring工作原理: 1.spring mvc请所有的请求都提交给...5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。

    SPRING入门

    页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常...

    Spring-mvc,例题

    -- 视图解析器,经返回的逻辑视图解析为物理视图 --&gt; &lt;property name="prefix" value="/"&gt;&lt;/property&gt; &lt;property name="suffix" value=".jsp"&gt;&lt;/property&gt; &lt;!-- prefix+modelAndView+suffix得到返回的物理视图 -...

    springmvc的运行原理

    springmvc的工作原理:前端控制器如何在处理器映射器中查找handle,在处理器适配器中处理handle,并且返回modelandview,通过视图解析器进行解析

    SpringMvc源码

    页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;

    springmvc demo

    页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常...

    spring mvc 思维导图

    Spring的模型-视图-控制器(MVC)框架是...•(6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。 •(8) Http响应:视图负责将结果显示到客户端。

    跟我学SpringMVC

    页面控制器/动 作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是 任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常...

Global site tag (gtag.js) - Google Analytics