CSDN博主:【java_wxid】
CSDN博主:点击【Java廖志伟】
CSDN社区:点击【幕后大佬】
码云:点击【互联网Java工程师知识扫盲】
随笔 - 882,  文章 - 0,  评论 - 1,  阅读 - 51800

第六节 属性域使用(request域、session域、application域)
1.request域

在SpringMVC中,当我们想把一个对象存入请求域有很多种操作方式,用哪一个都可以。
①使用Model对象

@RequestMapping("/requestAttrModel")
public String requestAttrModel(Model model) {
    model.addAttribute("appleAttrName", "appleAttrValue");
    return "result";
}

②使用ModelMap

@RequestMapping("/requestAttrModelMap")
public String requestAttrModelMap(ModelMap modelMap) {
    modelMap.addAttribute("bananaAttrName", "bananaAttrValue");
    return "result";
}

③使用Map

@RequestMapping("/requestAttrMap")
public String requestAttrMap(Map<String, Object> map) {
    map.put("orangeAttrName", "orangeAttrValue");
    return "result";
}

④使用HttpServletRequest

@RequestMapping("/requestAttrRequest")
public String requestAttrRequest(HttpServletRequest request) {
    request.setAttribute("grapeAttrName", "grapeAttrName");
    return "result";
}

2.session域
向session域存入数据,真正有效的办法只有一个

@RequestMapping("/sessionAttr")
public String sessionAttr(HttpSession session) {
    session.setAttribute("sessionAttrName", "sessionAttrValue");
    return "result";
}

3.application域

向application域存入数据需要先拿到ServletContext对象。前面介绍过获取ServletContext对象的两种方法。拿到ServletContext对象后调用setAttribute()方法。
servletContext.setAttribute(“appAttrName”,“appAttrValue”);

4.ModelAndView

在把数据存入请求域时还有一个方法:使用ModelAndView对象。

@RequestMapping("/modelAndView")
public ModelAndView testModelAndView() {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("result");
    modelAndView.addObject("mavAttrName", "mavAttrValue");
    return modelAndView;
}

见名知意,ModelAndView就是把模型和视图封装到一起。其实即使我们没有明确使用ModelAndView,SpringMVC也会在handler方法执行完成后把模型和视图封装到ModelAndView对象中。

在这里插入图片描述

//检查handler方法的返回值是否为ModelAndView类型
if (returnValue instanceof ModelAndView) {
    ModelAndView mav = (ModelAndView) returnValue;
    //合并模型对象
    mav.getModelMap().mergeAttributes(implicitModel);
    return mav;
}
//检查handler方法的返回值是否为Model类型
else if (returnValue instanceof Model) {
    //创建ModelAndView对象并将之前收集的模型对象存进去
    return new ModelAndView().addAllObjects(implicitModel).addAllObjects(((Model) returnValue).asMap());
}
//检查handler方法的返回值是否为View类型
else if (returnValue instanceof View) {
    //创建ModelAndView对象并存入视图和模型
    return new ModelAndView((View) returnValue).addAllObjects(implicitModel);
}
//检查handler方法的返回值是否为Map类型
else if (returnValue instanceof Map) {
    //创建ModelAndView对象并将之前收集的模型对象存进去
    return new ModelAndView().addAllObjects(implicitModel).addAllObjects((Map<String, ?>) returnValue);
}
//检查handler方法的返回值是否为String类型
else if (returnValue instanceof String) {
    //创建ModelAndView对象并把handler方法返回的字符串作为视图名称,且存入之前收集的模型数据
    return new ModelAndView((String) returnValue).addAllObjects(implicitModel);
}
posted on   我是廖志伟  阅读(4)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

南北踏尘
点击右上角即可分享
微信分享提示