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);
    }
    
  • 相关阅读:
    随笔1
    随笔
    shared_ptr<> reset
    c++模板库(简介)
    rockmongo用法
    随笔
    TEXT宏,TCHAR类型
    sprintf
    基于SOA的银行系统架构
    大纲6 信息化规划与管理
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812072.html
Copyright © 2011-2022 走看看