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

最简单的ModelAndView是持有View的名称返回,之后View名称被View resolver,也就是实作org.springframework.web.servlet.View介面的实例解析,例如 InternalResourceViewJstlView等等,最简单的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应用程式位址。

springMVC中的ModelAndView说明的更多相关文章

  1. SpringMVC中使用ModelAndView遇到的问题

    本文记录我在SpringMVC中使用ModelAndView,添加模型数据到ModelAndView中时遇到的问题: 1.jsp页面用EL表达式来获取值时直接显示EL表达式,JSP不解析EL表达式: ...

  2. SpringMvc中ModelAndView模型的应用

    /** * 目标方法的返回值可以是 ModelAndView 类型. * 其中可以包含视图和模型信息 * SpringMVC 会把 ModelAndView 的 model 中数据放入到 reques ...

  3. SpringMVC中的Model和ModelAndView的区别

    1.主要区别 Model是每次请求中都存在的默认参数,利用其addAttribute()方法即可将服务器的值传递到jsp页面中:ModelAndView包含model和view两部分,使用时需要自己实 ...

  4. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  5. 详解SpringMVC中GET请求

    GET请求概述 GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接.URL的编码格式采用的是ASCII编码,而不是uniclde,所有的非ASCII字符都要编 ...

  6. SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  7. SpringMVC中使用Json传数据

    在web项目中使用Json进行数据的传输是非常常见且有用的,在这里介绍下在SpringMVC中使用Json传数据的一种方法,在我的使用中,主要包括下面四个部分(我个人喜好使用maven这类型工具进行项 ...

  8. springmvc中RequestMapping的解析

    在研究源码的时候,我们应该从最高层来看,所以我们先看这个接口的定义: package org.springframework.web.servlet; import javax.servlet.htt ...

  9. 9.springMVC中的拦截器

    springMVC中的拦截器大概大致可以分为以下几个步骤去学习: 1.自定义一个类实现HandlerInterceptor接口,这里要了解其中几个方法的作用 2.在springMVC的配置文件中添加拦 ...

随机推荐

  1. Stacey矩阵简介

    1. Stacey 矩阵包含哪几个区域? 1区:Simple 第一个区域,需求明确,技术(解决方案)也确定,这类项目就是简单的项目(Simple):比如注册一个新公司,需求很明确,手续也很清楚,就那么 ...

  2. (三)创建基于maven的javaFX+springboot项目创建

    创建基于maven的javaFx+springboot项目有两种方式,第一种为通过非编码的方式来设计UI集成springboot:第二种为分离用户界面(UI)和后端逻辑集成springboot,其中用 ...

  3. java实现spark常用算子之ReduceByKey

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spa ...

  4. WebStorm 启动时提示Failed to load JVM DLL

    环境:win7 64位:时间:2019-11-18 问题描述 启动webstorm 时提示failed to load JVM DLL 解决方法 启动时快捷方式要选到64位的exe

  5. 99乘法表(js)

    //九九乘法表 let i,j,str; for(i=1;i<=9;i++) { str = ""; for(j=1;j<=i;j++) { str = str+i+' ...

  6. 微信小程序页面跳转传参方式

    //实现跳转的A页面 jump: function () { let a = 1; let b = 2; wx.navigateTo({ url: '/page/vipOrder/vipOrder?d ...

  7. OO方式实现ALV: cl_salv_table

    这里总结最近用cl_salv_table实现ALV遇到问题和解决办法 FORM set_alv2 . DATA: lv_syrepid TYPE syrepid. lv_syrepid = sy-cp ...

  8. ORALCE 数据库字符串处理、常用函数

    .字符串转日期: to_date(paramStr,'YYYYMMDDHH24MISS') to_date(paramStr,'yyyy-MM-DD') to_date(paramStr,'yyyy/ ...

  9. java开发技巧

    1,IDEA辅助功能Shift +F2去到有错误的地方Alt+Enter,会给出解决错误的建议: 2,调试,没问题的步骤,直接跳过,不要跳入细节: 调试时,要明确要跟踪的变量,不要陷入混乱: 3,调试 ...

  10. ubuntu下python3.6.5import tensorflow显示非法指令(核心已转储)

    1.版本 ubuntu版本为14.04 python为3.6.5 tensorflow为pip3安装的1.8.0版本 2.解决 删除原先的tensorflow:sudo pip3 uninstall ...