SpringMVC视图解析,就是将业务数据绑定给JSP域对象,并在客户端进行显示。

域对象:

  pageContext、request、session、application

业务数据绑定是有ViewResolver 完成的;

SpringMVC提供了一下几种方式绑定业务数据:

  1、Map

  2、Model

  3、ModelAndView

  4、@sessionAttribute

  5、@ModelAttribute

  • 业务数据绑定到request域对象

    Map

  SpringMVC在内部使用Model接口存储业务数据,在调用业务方法之前会创建一个隐含对象作为业务数据的存储容器。设置业务方法的入参为Map类型,SpringMVC会将隐含对象的引用传递给入参。

  开发者可以对模型中所有数据进行管理,包括访问和添加、修改、删除。

  开发者只需要在业务方法处添加Map类型的入参,方法体中便可以通过对入参的操作来完成业务数据的添加。

    @RequestMapping("/map")
    public String mapTest(Map<String, User> map){
        User user = new User();
        user.setId(7);
        user.setName("cronaldo");
        user.setAge(35);
        map.put("user", user);
        return "show";
    }

访问http://localhost:7777/view/map

    

    Model

  与Map类似,业务方法通过入参来完成业务数据的绑定。

    @RequestMapping("/model")
    public String modelTest(Model model){
        User user = new User();
        user.setId(10);
        user.setName("meisi");
        user.setAge(33);
        model.addAttribute("user", user);
        return "show";
    }

  访问http://localhost:7777/view/model

      

    HTTPServletRequest

    @RequestMapping("/request")
    public String request(HttpServletRequest request){
        User user = new User();
        user.setId(8);
        user.setName("kaka");
        user.setAge(39);
        request.setAttribute("user", user);
        return "show";
    }

  访问http://localhost:7777/view/request

    

    ModelAndView

  与 Map、 Model 不同的是, ModelAndView 不但包含了业务数据,同时也包含了视图信息,将视图和业务数据进行了整合,封装成一个对象,如果使用 ModelAndView 来处理业务数据,业务方法的返回值必须是 ModelAndView 对象。
  业务方法中对 ModelAndView 进行两个操作:
    1、填充业务数据
    2、绑定视图信息

    @RequestMapping("/modelAndView")
    public ModelAndView modelAndView(){
        User user = new User();
        user.setId(77);
        user.setName("buFeng");
        user.setAge(41);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("show");
        return modelAndView;
    }

  访问http://localhost:7777/view/modelAndView

    @RequestMapping("/modelAndView2")
    public ModelAndView modelAndView2(){
        User user = new User();
        user.setId(77);
        user.setName("buFeng");
        user.setAge(41);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        View view = new InternalResourceView("/show.jsp");
        modelAndView.setView(view);
        return modelAndView;
    }

  访问http://localhost:7777/view/modelAndView2

   

    @ModelAttribute

      1、定义一个方法,该方法用来返回要填充到业务数据中的对象;

      2、给该方法添加@ModelAttribute注解,该方法不是业务方法;

    @RequestMapping("/modelAttribute")
    public String modelAttribute(){
        return "show";
    }
    @ModelAttribute
    public User getUser(){
        User user = new User();
        user.setId(123);
        user.setName("sunjian");
        user.setAge(32);
        return user;
    }
    @ModelAttribute
    public void getUser2(Model model){
        User user = new User();
        user.setId(124);
        user.setName("sunjian3");
        user.setAge(33);
        model.addAttribute("user", user);
    }
    @ModelAttribute
    public void getUser3(Map<String, User> map){
        User user = new User();
        user.setId(125);
        user.setName("sunjia4");
        user.setAge(34);
        map.put("user", user);
    }

  访问http://localhost:7777/view/modelAttribute

  

  • 业务数据绑定到session域对象

    session

    @RequestMapping("/session")
    public String session(HttpServletRequest request){
        User user = new User();
        user.setId(9);
        user.setName("sunjian9");
        user.setAge(29);
        request.getSession().setAttribute("user", user);
        return "show2";
    }
    @RequestMapping("/session2")
    public String session2(HttpSession session){
        User user = new User();
        user.setId(8);
        user.setName("sunjian10");
        user.setAge(28);
        session.setAttribute("user", user);
        return "show2";
    }

  访问http://localhost:7777/view/session

  

  访问http://localhost:7777/view/session2

  

    @SessionAttributes

  在类定义处添加@SessionAttributes注解,只要业务方法中向域对象中存入了模型数据,则SpringMVC会自动把它同步到session中。有名称、类型两种方式。

  @SessionAttributes(value = "user")

  @SessionAttributes(types = User.class)

    @RequestMapping("/session3")
    public ModelAndView session2(){
        User user = new User();
        user.setId(007);
        user.setName("sunjian007");
        user.setAge(27);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("show2");
        modelAndView.addObject("user", user);
        return modelAndView;
    }

  访问http://localhost:7777/view/session3

  

完整代码如下:

  entity

package com.sunjian.entity;

/**
 * @author sunjian
 * @date 2020/3/17 14:25
 */
public class User {
    private Integer id;
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age + '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}

  controller

package com.sunjian.controller;

import com.sunjian.entity.Address;
import com.sunjian.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.view.InternalResourceView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;

/**
 * @author sunjian
 * @date 2020/3/17 19:17
 */
@Controller
@RequestMapping("/view")
//@SessionAttributes(value = "user")
@SessionAttributes(types = User.class)
public class ViewController {
    @RequestMapping("/map")
    public String mapTest(Map<String, User> map){
        User user = new User();
        user.setId(7);
        user.setName("cronaldo");
        user.setAge(35);
        map.put("user", user);
        return "show";
    }

    @RequestMapping("/model")
    public String modelTest(Model model){
        User user = new User();
        user.setId(10);
        user.setName("meisi");
        user.setAge(33);
        model.addAttribute("user", user);
        return "show";
    }

    @RequestMapping("/request")
    public String request(HttpServletRequest request){
        User user = new User();
        user.setId(8);
        user.setName("kaka");
        user.setAge(39);
        request.setAttribute("user", user);
        return "show";
    }

    @RequestMapping("/modelAndView")
    public ModelAndView modelAndView(){
        User user = new User();
        user.setId(77);
        user.setName("buFeng");
        user.setAge(41);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("show");
        return modelAndView;
    }

    @RequestMapping("/modelAndView2")
    public ModelAndView modelAndView2(){
        User user = new User();
        user.setId(77);
        user.setName("buFeng");
        user.setAge(41);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        View view = new InternalResourceView("/show.jsp");
        modelAndView.setView(view);
        return modelAndView;
    }

    @RequestMapping("/modelAttribute")
    public String modelAttribute(){
        return "show";
    }
    @ModelAttribute
    public User getUser(){
        User user = new User();
        user.setId(123);
        user.setName("sunjian");
        user.setAge(32);
        return user;
    }
    @ModelAttribute
    public void getUser2(Model model){
        User user = new User();
        user.setId(124);
        user.setName("sunjian3");
        user.setAge(33);
        model.addAttribute("user", user);
    }
    @ModelAttribute
    public void getUser3(Map<String, User> map){
        User user = new User();
        user.setId(125);
        user.setName("sunjia4");
        user.setAge(34);
        map.put("user", user);
    }

    @RequestMapping("/session")
    public String session(HttpServletRequest request){
        User user = new User();
        user.setId(9);
        user.setName("sunjian9");
        user.setAge(29);
        request.getSession().setAttribute("user", user);
        return "show2";
    }
    @RequestMapping("/session2")
    public String session2(HttpSession session){
        User user = new User();
        user.setId(8);
        user.setName("sunjian10");
        user.setAge(28);
        session.setAttribute("user", user);
        return "show2";
    }

    @RequestMapping("/session3")
    public ModelAndView session2(){
        User user = new User();
        user.setId(007);
        user.setName("sunjian007");
        user.setAge(27);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("show2");
        modelAndView.addObject("user", user);
        return modelAndView;
    }
}

  show.jsp

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

  show2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${sessionScope.user}
</body>
</html>

  

    

OK.

SpringMVC框架——视图解析的更多相关文章

  1. SpringMVC源码分析6:SpringMVC的视图解析原理

    title: SpringMVC源码分析6:SpringMVC的视图解析原理 date: 2018-06-07 11:03:19 tags: - SpringMVC categories: - 后端 ...

  2. SpringMVC 多视图解析器配置以及问题

    在SpringMVC模式当中可以通过如下配置来支持多视图解析 <!-- jsp jstl --> <bean id="JSPViewResolver" class ...

  3. SpringMVC——说说视图解析器

    学习SpringMVC——说说视图解析器   各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请 ...

  4. SpringMVC框架图解析

    Spring框架提供了构造Web应用程序的全能MVC模块.Spring MVC分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它们更容易进行制定.是一个标准的MVC框架. 那你猜一猜哪 ...

  5. springmvc返回视图(解析)

    1.什么是视图? 视图就是展示给用户看的结果.可以是很多形式,例如:html.JSP.excel表单.Word文档.PDF文档.JSON数据.freemarker模板视图等等. 2.传统JSP和JST ...

  6. 学习SpringMVC——说说视图解析器

    各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...

  7. SpringMVC的视图解析器

    ViewResolver和View介绍 SpringMVC用于处理视图最重要的两个接口是ViewResolver和View.ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视 ...

  8. springMVC初探视图解析器——InternalResourceViewResolver

    springmvc在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器. springmvc里提供了多个视图解析器,InternalResourceViewResolver就 ...

  9. SpringMVC中视图解析器

    视图解析器:固定写法直接coppy就行 1.dispatcherServlet-servlet.xml中添加 <!-- 视图解析器InternalResourceViewResolver --& ...

随机推荐

  1. netty源码分析(十八)Netty底层架构系统总结与应用实践

    一个EventLoopGroup当中会包含一个或多个EventLoop. 一个EventLoop在它的整个生命周期当中都只会与唯一一个Thread进行绑定. 所有由EventLoop所处理的各种I/O ...

  2. 极力推荐大佬的java项目的博客

    此次说明:这是我从码云上拉取下来的java项目,仅供试验说明,不做任何获利渠道,若是发现有人拿此做其他用处,需像码云上这位大佬说明,特此感谢!!! 准备工作:     安装 maven,jdk1.8, ...

  3. java.lang.ClassNotFoundException :xxxxxxx

    码的!java.lang.ClassNotFoundException: org.springframework.jdbc.core.RowMapper这个错误搞了半天 因为写的项目是手动建的WEB- ...

  4. 直播问答App乃虚火,调侃知识终不能长久盈利

    ​ 随着王思聪在微博宣布"我.我乐意",一款叫"冲顶大会"的App冲到了大众面前,紧接着"芝士超人"携10亿元奖金从天而降,瞬间之内,在线答 ...

  5. App自动化测试方案

    App自动化测试方案 1.1  概述 什么是App自动化?为什么要做App自动化? App自动化是指给 Android或iOS上的软件应用程序做的自动化测试. 手工测试和自动化测试的对比如下: 手工测 ...

  6. 如何应对HR小姐姐的千年历史遗留问题:你为什么从上家公司离职?

    最近找我询问面试问题的学生比较多,而且问的问题基本上都是课堂上讲过的,好吧,在此心疼自己三秒钟. 那么今天就为各位宝宝们整理一下,如何优雅的回复HR小姐姐的这个千年历史遗留问题:你为什么从上家公司离职 ...

  7. Java NIO-09-零拷贝之 DMA

    DMA 的好处 在介绍DMA之前我想问大家:我们为什么要引入DMA,DMA对我们有什么好处那? 计算机系统中各种常用的数据输入/输出方法有查询方式(包括无条件及条件传送方式)和中断方式,这些方式适用于 ...

  8. 5G时代,什么将会消失?

    ​​5G时代说着说着就来了,当然,它不可能一撮而就,但正如4G.移动互联网和WIFI这些东西基本上是日益精进的水平,现如今饭馆的生意是否火爆,不仅仅在于其菜品和服务的质量,更在于他们有没有WIFI以及 ...

  9. 函数节流throttle和防抖debounce

    throttle 函数节流 不论触发函数多少次,函数只在设定条件到达时调用第一次函数设定,函数节流 1234567891011 let throttle = function(fn,intervalT ...

  10. Nginx使用和配置

    概要: Nginx 简介 Nginx 架构说明 Nginx 基础配置与使用 Nginx 反向代理与负载均衡 Nginx 实现高速缓存 Nginx 性能参数调优 一.Nginx 简介与安装 Nginx ...