SpringMVC-域对象共享数据

一、request域对象共享数据

1.1 通过ServletAPI共享数据

java 复制代码
    @RequestMapping("/servletAPI")
    public String servletAPI(HttpServletRequest request){
        request.setAttribute("requestAttribute","helloworld");
        return "servletAPI";
    }
html 复制代码
<!--通过thymeleaf语法来获取request域对象中的数据,获取request属性时,不需要使用request.
    直接通过属性名获得数据即可-->
<p th:text="${requestAttribute}"></p>

1.2 通过ModelAndView共享数据

java 复制代码
    /**
     * ModelAndView有model和view的功能
     * @return 返回值为ModelAndView对象,交给前端处理器处理
     */
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        //new一个ModelAndView对象
        ModelAndView modelAndView = new ModelAndView();
        //向请求域中共享数据
        modelAndView.addObject("requestAttribute","helloworld,modelandview");
        //设置视图名称,由thymeleaf解析
        modelAndView.setViewName("testModelAndView");
        return modelAndView;
    }

1.3 通过Model共享数据

java 复制代码
    /**
     *
     * @param model 传入Model对象,以便向request中共享数据
     * @return 返回视图名称
     */
    @RequestMapping("/testModel")
    public String testModel(Model model){
        //向request中共享数据
        model.addAttribute("requestAttribute","helloworld,Model");
        return "testModel";
    }

1.4 通过map共享数据

java 复制代码
    @RequestMapping("/testMap")
    public String testMap(Map<String,Object> map){
        map.put("requestAttribute","helloworld,Map");
        return "testMap";
    }

1.5 通过ModelMap共享数据

java 复制代码
    @RequestMapping("/testModelMap")
    public String testModelMap(ModelMap modelMap){
        modelMap.addAttribute("requestAttribute","helloworld,ModelMap");
        return "testModelMap";
    }

1.6 Model、ModelMap和Map的关系

上面使用的Model、ModelMap和Map类型的参数本质上都是同一个类BindingAwareModelMap的实例。



1.7 ModelAndView

以上方法最后都会使用到ModelAndView对象,所以这些方法本质上都是向ModelAndView中添加数据。

打断点后调试,可以在方法调用栈中看到doDispatch方法,进入这个方法中。

可以看到这个方法中得到了一个ModelAndView对象,接着在这一行打断点,然后进入调试模式,执行上述的所有共享数据的方法,就会发现这些方法都执行了这一行代码,也就是都使用了ModelAndView对象。

二、session域对象共享数据

向session域中共享数据直接使用原生API即可。

java 复制代码
    @RequestMapping("/testSession")
    public String testSession(HttpSession session){
        session.setAttribute("sessionAttribute","helloworld,session");
        return "testSession";
    }

三、context域对象共享数据

向context域对象中共享数据直接使用原生API即可。

java 复制代码
    @RequestMapping("/testContext")
    public String testContext(HttpServletRequest request){
        ServletContext application = request.getServletContext();
        application.setAttribute("contextAttribute","helloworld,context");
        return "testContext";
    }
相关推荐
马剑威(威哥爱编程)2 分钟前
【AI全栈后端12-12】Spring Boot 3.x 到 4.x 迁移实操:Jakarta 11、Jackson 3 与 AI 2.0
java·开发语言·spring boot·后端
Gauss松鼠会3 分钟前
【GaussDB】破除gaussdb ugin索引支持中文模糊查询的迷思-字符序
java·运维·服务器·网络·数据库·gaussdb·经验总结
IT研究室10 分钟前
最新计算机毕业设计选题推荐-基于spring boot的心桥·心理健康综合服务平台-网站-文档指导-Java-springboot
java·spring boot·课程设计
Sarvartha34 分钟前
Object 类
java·开发语言
知守观37 分钟前
feign-core 就在依赖树里,运行时却找不到类:一次 provided scope 引发的启动失败排查
java·spring cloud·maven
她的男孩38 分钟前
企业接口照样拦得住:独立 Flyway、@RequiresFeature 与离线许可证
java·spring boot·后端
十年Java程序媛38 分钟前
Lambda 与函数式接口|别只会复制 ()->{},底层规则和坑一次性讲清
java·spring boot·后端
Nozokime1 小时前
ThreadLocal 在流式 Agent 里静默失效:LangChain4j 轨迹埋点的零侵入方案
java
小宋10211 小时前
OpenTelemetry GenAI可观测性实战:串起模型、工具、Token与错误
java·人工智能·算法·贪心算法
m0_587383001 小时前
工业场景设备维修维护实战技巧 全流程标准化落地与常见问题排查指南
java·spring·小程序·架构·需求分析