SpringMVC之ModelAndView类详细分析(全)

简介: 目录前言1. 方法2. 配置3. addObject 添加对象详解4. 重定向前言通过查看源码可以得知这个类主要是在web MVC框架中的模型和视图的Holder。 请注意,这些是完全不同的。 这个类仅仅保存了两者,使得控制器可以在一个返回值中同时返回模型和视图。表示处理程序返回的模型和视图,由DispatcherServlet解析。 视图可以采用String视图名的形式,需要通过ViewResolver对象解析; 或者,可以直接指定一个View对象。 该模型是一个Map,允许使用多个按名称键控

前言

在这里插入图片描述

通过查看源码可以得知
这个类主要是
在web MVC框架中的模型和视图的Holder。 请注意,这些是完全不同的。 这个类仅仅保存了两者,使得控制器可以在一个返回值中同时返回模型和视图。
表示处理程序返回的模型和视图,由DispatcherServlet解析。 视图可以采用String视图名的形式,需要通过ViewResolver对象解析; 或者,可以直接指定一个View对象。 该模型是一个Map,允许使用多个按名称键控的对象。

通过总的概括可以得知
==ModelAndView中包含了一个model属性和一个view属性,model其实是一个ModelMap类型,它是一个LinkedHashMap的子类,view包含了一些视图信息。==

1. 方法

主要讲解常用方法和类方法的功能,之后会将一些大概方法和代码以及实战

==构造方法:==

方法 功能
ModelAndView() 默认构造函数,填充bean的属性
ModelAndView(String viewName) 有参构造,模型数据暴露
ModelAndView(String viewName, Map model) 创建一个视图名称和模型新的ModelAndView
ModelAndView(String viewName, String modelName, Object modelObject) 构造采取单一的模式对象
ModelAndView(View view) 在没有模型数据暴露
ModelAndView(View view, Map model) 创建一个视图对象和模型,新的ModelAndView
ModelAndView(View view, String modelName, Object modelObject) 构造采取单一的模式对象

==类方法==

方法 功能
ModelAndView addAllObjects(Map modelMap) 添加包含在所提供的地图模型中的所有条目
ModelAndView addObject(Object modelObject) 添加对象使用的参数名称生成模型
ModelAndView addObject(String modelName,ObjectmodelObject) 对象添加到模型中
Map getModel() 返回的模型图
protectedMap getModelInternal() 返回的模型图
ModelMap getModelMap() 返回底层ModelMap实例(从不为null)
View getView() 返回View对象
String getViewName() 返回视图名称由DispatcherServlet
boolean isEmpty() ModelAndView对象是否为空
void setView(Viewview) 设置此ModelAndView的视图对象
void setViewName(StringviewName) ModelAndView的设置视图名称,通过ViewResolverDispatcherServlet
String toString() 返回模型和视图的诊断信息

2. 配置

使用该类需要在在application.xml中配置支持ModelAndView

#配置视图解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

3. addObject 添加对象详解

比如下面的代码模型
具体功能参数上有已讲解

@Controller
public class IndexController {

    @RequestMapping(value = "/say")
    public ModelAndView say() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("message","Hello,SpringBoot");
        mv.setViewName("say");
        return mv;
    }

    @RequestMapping(value = "/index")
    public String index(Model model) {
        model.addAttribute("message","HelloWorld");
        return "say";
    }
}

jsp具体内容为

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>

通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面

用这个方法传值到jsp也是可以的

4. 重定向

Spring MVC中ModelAndView一般用来返回视图,但是ModelAndView也是支持Servlet中的两种重定向方式,ModelAndView默认使用forward重定向方式,同时也支持redirect重定向。

redirect重定向

public ModelAndView getPage404() {        
    ModelAndView mv = new ModelAndView("redirect:/404.htm");
    return mv;
}

forward重定向

public ModelAndView saveUser(HttpServletRequest request, HttpServletResponse response,UserModel user) throws Exception {  
    ModelAndView mv = new ModelAndView("/user/save/result");//默认为forward模式   
    mv.addObject("message","保存用户成功!");  
    return mv;  
}
相关文章
|
前端开发 Java API
Spring MVC相关异常类
Spring MVC相关异常类
63 0
|
6月前
|
Java 数据库 数据安全/隐私保护
基于SSM框架实现管科类考研自我管理系统(分前后台spring+springmvc+mybatis+maven+jsp+jquery)
基于SSM框架实现管科类考研自我管理系统(分前后台spring+springmvc+mybatis+maven+jsp+jquery)
|
6月前
ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
|
6月前
ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
|
6月前
|
缓存 前端开发 Java
【Spring底层原理高级进阶】轻松掌握 Spring MVC 的拦截器机制:深入理解 HandlerInterceptor 接口和其实现类的用法
【Spring底层原理高级进阶】轻松掌握 Spring MVC 的拦截器机制:深入理解 HandlerInterceptor 接口和其实现类的用法
|
前端开发 Java Spring
SpringMVC 如何实现异步处理及内置异步请求类介绍
SpringMVC 如何实现异步处理及内置异步请求类介绍
116 1
|
前端开发
springmvc中model类和ModelAndView
springmvc中model类和ModelAndView
|
前端开发 Java 索引
Spring MVC Controller 方法参数 Map 的实现类是什么?
问题 题主问题描述如下: 在SpringBoot中,Controller的参数中有Map接口类型的,请问他的实现类是什么? 突发奇想,在SpringBoot中,Controller的参数中有Map接口类型的
400 0
Spring MVC Controller 方法参数 Map 的实现类是什么?
|
前端开发 Java API
Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet API对象
Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet API对象
281 0
springMvc45-自定义配置类
springMvc45-自定义配置类
80 0