(六)springmvc之ModelAndView、Model、Map、ModelMap

<a href="<%=request.getContextPath()%>/responseData/response_1">使用原生的作用域</a>
    
    <a href="<%=request.getContextPath()%>/responseData/response_2">ModelAndView</a>
    
    <a href="<%=request.getContextPath()%>/responseData/response_3">Model,Map,ModelMap</a>

controller

package com.shyroke.controller;

import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping(value = "/responseData")
public class ResponseDataController {
    @Autowired
    private HttpServletRequest request;
    @Autowired
    private HttpServletResponse response;
    @Autowired
    private HttpSession session;
    @Autowired
    private ServletContext servletContext;

    @RequestMapping(value = "/response_1")
    public String response_1() throws Exception {
        this.request.setAttribute("req_key", "Request作用域");

        this.session.setAttribute("session_key", "Session作用域");

        this.servletContext.setAttribute("app_key", "Application作用域");

        return "responseData";
    }

    @RequestMapping(value = "/response_2")
    public ModelAndView response_2() throws Exception {
        /**
         * ModelAndView中的数据只保存在Request中。
         */
        ModelAndView mv = new ModelAndView();
        mv.addObject("mv_1", "ModelAndView中的数据1");
        mv.addObject("mv_2", "ModelAndView中的数据2");

        mv.setViewName("responseData");

        return mv;
    }

    /**
     * Model,Map,ModelMap中放入相同的数据,会前后覆盖。
     * 
     * 
     * ModelAndView与上述3个放入相同的数据,最后起作用是ModelAndView中的数据。
     */
    @RequestMapping(value = "/response_3")
    public ModelAndView response_3(Model model, Map map, ModelMap modelMap)
            throws Exception {
        System.out.println("response_3方法");

        ModelAndView mv = new ModelAndView();
        mv.addObject("mv_1", "ModelAndView中的数据1");
        mv.addObject("common", "ModelAndView中放入的");

        model.addAttribute("model_1", "Model中的数据");
        model.addAttribute("model_2", "Model中的数据2");

        map.put("map_1", "Map中的数据1");
        map.put("map_2", "Map中的数据2");

        modelMap.addAttribute("modelMap_1", "ModelMap中的数据");
        modelMap.put("modelMap_2", "ModelMap中的数据2");
        modelMap.addAttribute("common", "ModelMap中放入的");
        map.put("common", "Map中放入的");
        model.addAttribute("common", "Model中放入的");

        mv.setViewName("responseData");
        return mv;
        // return "responseData";
    }

}
  • ModelAndView中的数据只保存在Request中。
  •  Model,Map,ModelMap中放入相同的数据,会前后覆盖。
  •  ModelAndView与上述3个放入相同的数据,最后起作用是ModelAndView中的数据。

结果:

原文地址:https://www.cnblogs.com/shyroke/p/7776830.html