ModelAndView解析
查看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建构方式例如以下:
假设您要返回呈现画面时所需的Model资料物件,则能够使用Map物件来收集呈现资料时所需的资料,然后在建构ModelAndView作为建构时的引数,您能够使用以下这个版本号的ModelAndView建构方法:
Map物件中设定好键(Key)与值(Value),之后能够在要呈现的画面中取出加以显示(比如在JSP网页中),假设您要返回一个Model资料物件并指定Model的名称,则能够使用以下这个ModelAndView版本号:
藉由modelName,您能够在要View的实作类别中取出Model资料物件,并依据View所使用的技术来加以显示(可能是JSP网页、Pdf等呈现技术)。
ModelAndView类别也提供实作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解析的更多相关文章
- SpringMVC 源码解析
前言 年初面试时接触到一道面试题,在聊到SpringMVC时提到了SpringMVC的开发者为何要设计父子容器呢,又或者说是父子容器的设计有什么更实际的作用呢? 首先 ...
- 012医疗项目-模块一:统一异常处理器的设计思路及其实现(涉及到了Springmvc的异常处理流程)
我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代 ...
- Spring系列之手写一个SpringMVC
目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 Spring系列之AOP的原理及手动实现 Spring系列之手写注解与配置文件的解析 引言 在前面的几个章节中我 ...
- Spring MVC 原理探秘 - 一个请求的旅行过程
1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...
- SSM工作流程的大致理解
//不是根据源码来理解的,所以细节有省略.. 首先从在浏览器输入URl的那一刻开始 例如输入 localhost:8080/MyProject/listCategory 初始化: 此时tomcat已经 ...
- 浅探SpringMVC中HandlerExecutionChain之handler、interceptor
讲解HandlerExecutionChain之前,先大致了解下SpringMVC的核心开发步骤: 在web.xml中部署DispaterServlet,并配置springmvc.xml等文件; 将映 ...
- springmvc处理一个请求的全流程
首先,用户的浏览器发出了一个请求,这个请求经过互联网到达了我们的服务器. Servlet 容器首先接待了这个请求,并将该请求委托给 DispatcherServlet 进行处理. 接着 Dispatc ...
- 从源码角度了解SpringMVC的执行流程
目录 从源码角度了解SpringMVC的执行流程 SpringMVC介绍 源码分析思路 源码解读 几个关键接口和类 前端控制器 DispatcherServlet 结语 从源码角度了解SpringMV ...
- 基于Nettty打造自己的MVC服务器
最近开始折腾Netty,体验下NIO编程.既然学习了,就要做点东西出来,要不然不容易掌握学到的东西.在Netty的官方demo上都有各种case的sample,打造Http服务器的核心代码就是从Sam ...
随机推荐
- [ES7] Object.observe + Microtasks
ES6: If you know about the Javascirpt's event loop. You know that any asyns opreations will be throw ...
- BOM 窗体相关属性以及页面可见区域的获取方式
1 在IE Safari Oper Chrome 都提供了screenLeft和screenTop属性: screenLeft : 相对于屏幕左边的距离 screenTop : 相对于屏幕上边的距离 ...
- Ubantu 命令
进入窗口删除文件(所有文件都可以删除) gksudo nautilus 输入法问题 ibus-daemon -drx
- 使用正则表达式限制swing (JTextField等) 的输入
之前使用Qt编写Gui程序的时候,可以直接使用正则表达式限制所有输入框,非常方便. 这段时间要做一份课程设计,使用java编写,ui要限制输入,比如只能输入x位数字,输入身份证等. 百度了许多资料,发 ...
- Linux安装系统注意事项及系统初始化
Linux安装系统注意事项 1.分区 学习用途: /boot:200M /swap :内存的1到2倍 /:根据需要分配大小,比如虚拟机下总空间是15G,那么可以分配8——10G跟/分区,如果是生产 ...
- java poi 合并单元格后边框问题
在项目中用poi合并单元格,但发现边框会有不显示的问题. 在网上搜集了答案,来记录一下. 解决方法: 将每个没用到的单元格都设空值. 例如: HSSFCell cell = row.createCel ...
- Mysql MERGE 引擎在分表环境下得使用
应用场景:当我们在做分表的时候,通常会把一个大表的数据拆分成若干个分表,这也是数据库优化中的分表概念.随着分表随之而来的问题就是多表查询. 现在有 t1,t2 两张数据表,需要满足不同的查询条件同时从 ...
- iOS Plist NSUserDefaults 数据存储
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法
我的Oracle 10g版本是10.2.0.1.0,(10.1同理)选择高级安装,提示“程序异常终止,发生未知错误”. 1.修改Oracle 10G\database\stage\prereq\db\ ...
- jQuery之Jcrop
头像裁剪是一个经常用到的功能,实现原理也较为简单,就是在本地选择好所需裁剪图片的坐标,将坐标发送到服务器,由服务器执行图片裁剪操作. jQuery插件Jcrop提供了强大的图片裁剪坐标选择插件.一下来 ...
org.springframework.web.servlet.ModelAndView