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


org.springframework.web.servlet
Class ModelAndView

java.lang.Object
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
ModelAndView()
          Default constructor for bean-style usage: populating bean properties instead of passing in constructor arguments.
ModelAndView(String viewName)
          Convenient constructor when there is no model data to expose.
ModelAndView(String viewName, Map model)
          Creates new ModelAndView given a view name and a model.
ModelAndView(String viewName, String modelName, Object modelObject)
          Convenient constructor to take a single model object.
ModelAndView(View view)
          Convenient constructor when there is no model data to expose.
ModelAndView(View view, Map model)
          Creates new ModelAndView given a View object and a model.
ModelAndView(View view, String modelName, Object modelObject)
          Convenient constructor to take a single model object.
 







































Method Summary
 ModelAndView addAllObjects(Map modelMap)
          Add all entries contained in the provided map to the model.
 ModelAndView addObject(String modelName, Object modelObject)
          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(View view)
          Set a View object for this ModelAndView.
 void setViewName(String viewName)
          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应用程式会要求client浏览器又一次发出一个所指定的请求位址,也就是实际上相当于client又一次连接至一个所指定的位址,因此浏览器的位址列上会出现被又一次导向的资讯,又一次导向的请求是由浏览器发出,所以不能訪问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等等的实作,分别进行不同的表现展处理。

ModelAndView解析的更多相关文章

  1. SpringMVC 源码解析

    前言         年初面试时接触到一道面试题,在聊到SpringMVC时提到了SpringMVC的开发者为何要设计父子容器呢,又或者说是父子容器的设计有什么更实际的作用呢?          首先 ...

  2. 012医疗项目-模块一:统一异常处理器的设计思路及其实现(涉及到了Springmvc的异常处理流程)

    我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代 ...

  3. Spring系列之手写一个SpringMVC

    目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 Spring系列之AOP的原理及手动实现 Spring系列之手写注解与配置文件的解析 引言 在前面的几个章节中我 ...

  4. Spring MVC 原理探秘 - 一个请求的旅行过程

    1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...

  5. SSM工作流程的大致理解

    //不是根据源码来理解的,所以细节有省略.. 首先从在浏览器输入URl的那一刻开始 例如输入 localhost:8080/MyProject/listCategory 初始化: 此时tomcat已经 ...

  6. 浅探SpringMVC中HandlerExecutionChain之handler、interceptor

    讲解HandlerExecutionChain之前,先大致了解下SpringMVC的核心开发步骤: 在web.xml中部署DispaterServlet,并配置springmvc.xml等文件; 将映 ...

  7. springmvc处理一个请求的全流程

    首先,用户的浏览器发出了一个请求,这个请求经过互联网到达了我们的服务器. Servlet 容器首先接待了这个请求,并将该请求委托给 DispatcherServlet 进行处理. 接着 Dispatc ...

  8. 从源码角度了解SpringMVC的执行流程

    目录 从源码角度了解SpringMVC的执行流程 SpringMVC介绍 源码分析思路 源码解读 几个关键接口和类 前端控制器 DispatcherServlet 结语 从源码角度了解SpringMV ...

  9. 基于Nettty打造自己的MVC服务器

    最近开始折腾Netty,体验下NIO编程.既然学习了,就要做点东西出来,要不然不容易掌握学到的东西.在Netty的官方demo上都有各种case的sample,打造Http服务器的核心代码就是从Sam ...

随机推荐

  1. URLConnection的连接、超时、关闭用法总结

    Java中可以使用HttpURLConnection来请求WEB资源. 1. URL请求的类别 分为二类,GET与POST请求.二者的区别在于:      a:) get请求可以获取静态页面,也可以把 ...

  2. Kafka在Linux环境下搭建过程

    准备工作 Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群.由于我们之前的分布式系统中已经安装zookeeper服务,这里不进行zookeeper安装教程以及应用教 ...

  3. QtXlsxWriter

    Code Issues26 Pull requests2   Pulse Graphs HTTPS clone URL You can clone with HTTPS orSubversion. C ...

  4. UISegmentedControl判断点击第几项

    UISegmentedControl 关于UISegmentedControl判断当前点击的是第几项,找了很久,终于再老外的博客上找到了,在委托中 UISegmentedControl *Seg=se ...

  5. .Net+EF连接Oracle 10、11 开发,ODAC安装配置与使用详解

    Oracle数据访问组件 (ODAC)  全称:Oracle Data Access Components 优点:由于微软在.net framework4中会将System.Data.OracleCl ...

  6. MBTI性格测试

    INFP 哲学家型——生活在自己的理想世界 报告接收人: 才储成员4361454 日期: 2014/9/2 一.你的MBTI图形 倾向示意图表示四个维度分别的倾向程度.从中间往两侧看,绿色指示条对应下 ...

  7. FlexSlider是一个非常出色的jQuery滑动切换插件

    FlexSlider是一个非常出色的jQuery滑动切换插件,它支持所有主流浏览器,并有淡入淡出效果.适合所有初级和高级网页设计师使用.不过很多人都只是使用默认的参数,今天来说说具体的参数来给大家看看 ...

  8. NFinal 视图—用户控件

    自定义控件 定义控件 以Label控件为例: 1.首先在Common文件夹下添加Label.cs文件,其中代码如下: //a.control的实体类必须继承NFinal.UserControl类 pu ...

  9. linux访问windows共享文件夹的两种方法

    有时需要在linux下需要访问windows的共享文件夹,可以使用mount挂载或者使用samba连接. 1.mount挂载 首先创建被挂载的目录: $ mkdir windows 将共享文件夹挂载到 ...

  10. JVM启动参数手册——JVM之八

    jdk1.4.2 JVM官方地址:http://java.sun.com/j2se/1.4.2/docs/guide/vm/index.html 标准和非标注参数(for windows):http: ...