zoukankan      html  css  js  c++  java
  • Spring MVC框架:第四章:属性域使用(request域、session域、application域)

    第六节 属性域使用(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);
    }
    
  • 相关阅读:
    activiti 自定义用户
    Activiti6 应用安装 activiti-admin,activiti-app,activiti-rest
    jsoup获取标签下的文本(去除子标签的)
    关于idea跳过错误编译的理解, 跳过报错的代码启动项目去debug测试其他正常的代码
    mybatis 使用参数
    AnnotatedElementUtils.findMergedAnnotation作用
    tomcat中AuthenticatorBase简单的安全认证
    tomcat跨域请求过滤器CorsFilter使用的预检preFlight及其他过滤器
    tomcat中SSIPrintenv.java漏洞修复
    Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货!)
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812072.html
Copyright © 2011-2022 走看看