`
prodream
  • 浏览: 106202 次
  • 性别: 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等等的实作,分别进行不同的表现展处理。

分享到:
评论

相关推荐

    springmvc关于modelAndView的使用详细

    你可以直接设置一个视图名,Spring MVC会根据配置自动解析出对应的视图解析器。例如,如果你设置`modelAndView.setViewName("success")`,并且在配置中,"success"可能对应着一个JSP页面或Thymeleaf模板。 ```java...

    03-主流框架-02-spring-MVC.doc

    - 视图解析器ViewResolver根据ModelAndView解析出视图,并渲染响应内容返回给客户端。 3. **配置Spring MVC** - 在web.xml中配置DispatcherServlet,设置其初始化参数,如`contextConfigLocation`指定Spring MVC...

    Spring+Mybatis框架 ModelAndView

    - 创建 `ModelAndView` 对象:`ModelAndView modelAndView = new ModelAndView();` - 添加模型数据:`modelAndView.addObject("key", value);` - 设置视图逻辑名:`modelAndView.setViewName("viewName");` 2. *...

    wa-spring1-SpringProject.zip_spring mvc 例子

    最后,视图解析器根据ModelAndView解析出具体的视图进行渲染。 2. **配置文件**:在Spring MVC项目中,我们通常会有一个`spring-mvc.xml`或`applicationContext.xml`配置文件,用于配置Bean定义、数据源、视图解析...

    springmvc案例|springmvc案例.zip

    - 视图解析器 ViewResolver 根据 ModelAndView 解析出实际的视图。 - 视图渲染,将 Model 中的数据展示给用户。 5. **拦截器(Interceptor)** - 可以定义预处理和后处理逻辑,例如登录检查、日志记录等。 - 在...

    SpringMVC示例

    最后,视图解析器根据ModelAndView解析出具体的视图页面进行渲染并返回给客户端。 **4. Controller的实现** Controller通常是实现了`HandlerMapping`接口或标记为`@Controller`的Spring Bean。例如,一个简单的...

    Springmvc4.1.9源码

    HandlerMapping根据URL映射到Controller,Controller处理业务逻辑后返回ModelAndView对象,ViewResolver将ModelAndView解析为实际的视图进行渲染。 在Spring MVC 4.1.9中,DispatcherServlet进行了优化,提高了性能...

    SpringMVC——执行原理及简单配置实现.docx

    然后,ViewResolver(视图解析器)根据ModelAndView解析视图名,结合数据渲染视图,并返回逻辑视图名给DispatcherServlet。最后,DispatcherServlet依据逻辑视图名调用合适的视图技术(如JSP、Freemarker等)呈现给...

    基于SSM的实验室课程管理系统源码.zip

    请求到达前端控制器DispatcherServlet,由它根据请求信息(如URL、HTTP方法)分发到相应的处理器(Controller),处理器执行完业务逻辑后返回ModelAndView对象,接着视图解析器将ModelAndView解析为具体的视图进行...

    springmvc 实便

    4. HandlerAdapter 将 Controller 返回的 ModelAndView 解析并传递给 ViewResolver。 5. ViewResolver 根据视图名找到对应的 View 实例。 6. View 渲染模型数据,并将结果返回给客户端。 四、注解驱动开发 Spring ...

    基于ssm+mysql的小学数学在线测试系统源码数据库.zip

    SpringMVC通过DispatcherServlet进行请求分发,ModelAndView对象封装了视图和数据,视图解析器则将ModelAndView解析成实际的视图(如JSP页面)。 3. **MyBatis**:MyBatis是一个持久层框架,它简化了数据库操作。在...

    超全的SSH面试题整理

    接着,ViewResolver根据ModelAndView解析出视图,最终渲染并返回给客户端。 Spring框架的优点包括: 1. 分层架构使得组件选择更加灵活。 2. POJO(Plain Old Java Object)编程简化了对象管理,增强了可测试性。 3....

    springMVC完整教程及其学习源代码案例

    4. 视图解析器ViewResolver根据ModelAndView解析出真正的视图。 5. 视图渲染Model中的数据并响应给客户端。 四、注解驱动开发 SpringMVC支持使用注解进行开发,如@Controller、@RequestMapping、@GetMapping、@...

    ssm高校疫情期间学生日常管理系统

    5. 视图解析器根据ModelAndView解析出具体的视图模板。 6. 渲染视图,向用户展示结果。 **3. MyBatis** MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码...

    跟开涛学SpringMVC、Spring3

    - 视图解析器(ViewResolver)根据ModelAndView解析出实际视图。 - 视图渲染,展示结果给用户。 4. **SpringMVC注解驱动开发**:如`@Controller`、`@RequestMapping`、`@Service`、`@Repository`等,使得代码更...

    SSM框架模板

    在这个文件中,你需要配置DispatcherServlet、ModelAndView解析器、视图解析器如`InternalResourceViewResolver`等。此外,还可以配置拦截器、控制器bean、以及各种服务和模型对象。 `jdbc.properties`文件是用来...

    Spring ModelAndView

    在Spring MVC中,`ModelAndView` 是一个关键类,用于封装处理结果和视图信息。 `ModelAndView` 类在处理完控制器逻辑后,用于存放模型数据和视图信息。模型数据是处理业务逻辑过程中生成的对象或值,它们会被传递到...

    Spring MVC- Mybatis 框架清晰整合

    HandlerMapping负责将请求映射到Controller,Controller处理业务逻辑后返回ModelAndView对象,最后ViewResolver根据ModelAndView解析出对应的视图进行渲染。 接下来是Mybatis。Mybatis摒弃了传统的JDBC模板代码,...

    springmvc_01szrz.rar

    7. **MVC流程**:用户发送请求到DispatcherServlet,它根据请求信息找到对应的Controller方法,执行方法后返回ModelAndView对象,然后视图解析器将ModelAndView解析为实际的视图(如JSP),最后渲染并返回给客户端。...

    SSM框架简单案例

    SpringMVC的工作流程包括:接收到HTTP请求后,DispatcherServlet负责分发请求到相应的Controller,Controller处理后,返回ModelAndView对象,接着视图解析器将ModelAndView解析成具体的视图,最后呈现给用户。...

Global site tag (gtag.js) - Google Analytics