zoukankan      html  css  js  c++  java
  • SpringMVC入门学习(七)----将数据放入域对象中 (request、session、application)

    1、Request域

    在SpringMVC中,一般在进行页面跳转时,都会带上该处理器处理完成的数据。我们都知道,SpringMVC的底层是封装了Servlet的代码,所以在SpringMVC中可以使用Servlet中的域对象,当然SpringMVC也额外给我们封装一些其它的域对象供我们使用,如Model、ModelMap。

    注:Model、ModelMap和Map的底层其实都是封装了Request请求。

    ①、使用Model对象

    在方法中将Model以形参的形式设置,使用addAttribute设置要传输的数据(注意是addAttribute属性,不是setAttribute)。返回值就是页面名称,这种方式比较常用。

    @RequestMapping("/requestAttrModel")
    public String requestAttrModel(Model model) {
        model.addAttribute("username", "张三");
        model.addAttribute("password", "123456");
        return "success";
    }
    

    ②、使用ModelMap

    ModelMap 是个Map集合可以使用Map的基本功能,ModelMap 也定义了addAttribute()方法

    @RequestMapping("/requestAttrModelMap")
    public String requestAttrModelMap(ModelMap modelMap) {
        modelMap.addAttribute("username", "张三");
        modelMap.put("password","123456");
        return "success";
    }
    

    ③、使用Map

    @RequestMapping("/requestAttrMap")
    public String requestAttrMap(Map<String, Object> map) {
        map.put("mapName", "mapValue");
        return "success";
    }
    

    ④、使用HttpServletRequest

    这是Servlet中原生的Request域对象。

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

    2、Session域

    向session域存入数据,真正有效的办法只有一个,直接使用Servlet原生的Session域对象

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

    3、Application域

    向application域存入数据需要先拿到ServletContext对象。前面介绍过获取ServletContext对象的两种方法。拿到ServletContext对象后调用setAttribute()方法,即可,用的比较少,可以用来加载网页中不经常改变的数据。

    @Autowired
    private ServletContext servletContext;
    
    @RequestMapping("/application/scope")
    public String applicationScope() {
        servletContext.setAttribute("appName", "appValue");
        return "success";
    }
    

    4、ModelAndView(推荐)

    ModelAndView我们平时中使用的最多的,它表示封装了ModelMap请求域和视图的对象(即数据模型+视图)。使用步骤如下所示:

    • 首先new一个ModelAndView实例
    • 使用addObject()设置需要像页面传输的数据
    • 使用setViewName()设置需要跳转的视图页面
    • 最后将ModelAndView对象返回
    • 这样前台就可以通过EL表达式${name}获取数据了
    @RequestMapping("/modelAndView")
    public ModelAndView testModelAndView() {
        
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("mavAttrName1", "mavAttrValue1");
        modelAndView.addObject("mavAttrName2", "mavAttrValue2");
        modelAndView.setViewName("success");
        return modelAndView;
    }
    

    如果要在ModelAndView中使用转发和重定向也可以在setViewName()中设置。

    //转发
    modelAndView.setViewName("forward:/WEB-INF/pages/show.jsp");
    
    //重定向,注:重定向不能访问/WEB-INF资源,因为是两次请求
    modelAndView.setViewName("redirect:/hello.jsp");
    
    作者: 唐浩荣
    本文版权归作者和博客园共有,欢迎转载,但是转载需在博客的合适位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    MySQL总结
    16 MySQL--正确使用索引
    15 MySQL--索引
    14 MySQL--事务&函数与流程控制
    13 MySQL--存储过程
    12 MySQL--内置功能介绍
    Spring课程 Spring入门篇 4-6 Spring bean装配之基于java的容器注解说明--@ImportResource和@Value java与properties文件交互
    Spring课程 Spring入门篇 4-5 Spring bean装配之基于java的容器注解说明--@Bean
    Spring课程 Spring入门篇 4-4 Spring bean装配(下)之Autowired注解说明3 多选一 qualifier
    Spring课程 Spring入门篇 4-3 Spring bean装配(下)之Autowired注解说明2 集合运用
  • 原文地址:https://www.cnblogs.com/tanghaorong/p/14761592.html
Copyright © 2011-2022 走看看