SpringMVC 域对象共享数据

03-03 7463阅读 0评论

文章目录

      • 1、使用ServletAPI向request域对象共享数据
      • 2、使用ModelAndView向request域对象共享数据
      • 3、使用Model向request域对象共享数据
      • 4、使用map向request域对象共享数据
      • 5、使用ModelMap向request域对象共享数据
      • 6、Model、ModelMap、Map的关系
      • 7、向session域共享数据
      • 8、向application域共享数据
      • 9、总结
      • ⭐好书推荐

        SpringMVC 域对象共享数据 第1张


        SpringMVC 域对象共享数据 第2张

        在Spring MVC中,可以使用域对象来共享数据。域对象是一个Map类型的对象,可以在请求处理方法之间共享数据。

        数据共享可以实现数据在不同组件、请求或模块之间的传递和共享,以方便数据的处理和展示,提高应用程序的性能和灵活性。


        SpringMVC主要提供了一下几种方式来达到数据共享:

        1、使用ServletAPI向request域对象共享数据

        在处理请求的方法中将数据存储到了HttpServletRequest对象的request域中,使用setAttribute方法。"myData"是数据的键,"data"是数据的值。

        示例代码:

        // 获取要共享的数据

        // 将数据存储在request域对象中

        // 转发请求至其他Servlet或JSP页面

        protected void doGet(HttpServletRequest request, HttpServletResponse response) {
           
            String data = "Hello, World!";
            
            request.setAttribute("myData", c);
            
            RequestDispatcher dispatcher = 	request.getRequestDispatcher("/path/to/your/servlet-or-jsp");
            dispatcher.forward(request, response);
        }
        

        2、使用ModelAndView向request域对象共享数据

        ModelAndView对象是一个包含数据模型和视图信息的容器,在控制器方法中可以将需要共享的数据存储到ModelAndView对象中,然后将该对象返回给Spring MVC框架。

        创建一个ModelAndView对象,并使用addObject方法将数据存储到该对象的模型中。"key"是数据的键,“value"是数据的值。然后,使用setViewName方法设置视图信息,指定要渲染的视图名为"example-view”。

        然后,Spring MVC框架会将ModelAndView对象中的数据传递给视图,并在视图渲染时将数据存储到request域对象中。在视图中可以使用相应的表达式语言(如JSTL或Thymeleaf的EL表达式)来获取并展示存储在request域中的数据。

        @RequestMapping("/testModelAndView")
        public ModelAndView testModelAndView(){
            /**
             * ModelAndView有Model和View的功能
             * Model主要用于向请求域共享数据
             * View主要用于设置视图,实现页面跳转
             */
            ModelAndView mav = new ModelAndView();
            //向请求域共享数据
            mav.addObject("testScope", "hello,ModelAndView");
            //设置视图,实现页面跳转
            mav.setViewName("success");
            return mav;
        }
        

        建议尽量在实际开发中使用更现代和推荐的方式,例如使用@ModelAttribute注解或在方法参数中使用Model对象,以更加简洁和便捷地向request域对象共享数据。

        3、使用Model向request域对象共享数据

        Model是一个接口,它可以在控制器方法的参数中声明,并使用它的方法将数据添加到其中,然后这些数据将自动传递到request域中。

        @RequestMapping("/testModel")
        public String testModel(Model model){
            model.addAttribute("testScope", "hello,Model");
            return "success";
        }
        

        4、使用map向request域对象共享数据

        在控制器方法的参数中声明一个Map参数,Spring MVC会自动将一个Map对象注入到该参数中。您可以向这个Map对象添加键值对,然后它们将自动传递到request域中。

        @RequestMapping("/testMap")
        public String testMap(Map map){
            map.put("testScope", "hello,Map");
            return "success";
        }
        

        当控制器方法返回视图名称时,Spring MVC框架会自动将Map对象中的数据传递到request域中,并在渲染视图时可以使用这些数据。例如,如果您使用JSP作为视图技术,您可以在JSP文件中使用EL表达式${key}来获取存储在request域中的数据

        5、使用ModelMap向request域对象共享数据

        ModelMap是一个具体实现了Model接口的类,它提供了更多的便捷方法来添加和访问数据。

        @RequestMapping("/testModelMap")
        public String testModelMap(ModelMap modelMap){
            modelMap.addAttribute("testScope", "hello,ModelMap");
            return "success";
        }
        

        当控制器方法返回视图名称时,Spring MVC框架会自动将ModelMap对象中的数据传递到request域中,并在渲染视图时可以使用这些数据。例如,如果您使用JSP作为视图技术,您可以在JSP文件中使用EL表达式${key}来获取存储在request域中的数据。

        6、Model、ModelMap、Map的关系

        Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的

        public interface Model{}
        public class ModelMap extends LinkedHashMap {}
        public class ExtendedModelMap extends ModelMap implements Model {}
        public class BindingAwareModelMap extends ExtendedModelMap {}
        

        7、向session域共享数据

        在控制器类上使用@SessionAttributes注解并指定了"myData"作为需要存储在Session域中的模型属性。在example方法中,我们使用model.addAttribute方法将数据添加到"myData"模型属性中。

        @RequestMapping("/testSession")
        public String testSession(HttpSession session){
            session.setAttribute("myData", "hello,session");
            return "success";
        }
        

        8、向application域共享数据

        控制器方法的参数中声明了一个ServletContext对象,并将其命名为"servletContext"。然后,我们使用setAttribute方法将数据添加到ServletContext对象中,"key"是数据的键,"value"是数据的值。

        数据将被存储在Application域中,可以在整个应用程序中访问和共享。

        @RequestMapping("/testApplication")
        public String testApplication(HttpSession session){
        	ServletContext application = session.getServletContext();
            application.setAttribute("testApplicationScope", "hello,application");
            return "success";
        }
        

        9、总结

        本文主要讲解了以下几种域对象可以使用:

        request域对象:通过使用HttpServletRequest对象的setAttribute方法向request域中存储数据,使用getAttribute方法从request域中获取数据。

        session域对象:通过使用HttpSession对象的setAttribute方法向session域中存储数据,使用getAttribute方法从session域中获取数据。

        application域对象:通过使用ServletContext对象的setAttribute方法向application域中存储数据,使用getAttribute方法从application域中获取数据。

        这些域对象都可以在控制器中使用,可以在不同的请求处理方法之间共享数据。例如,一个请求处理方法可以将数据存储到request域中,然后另一个请求处理方法可以从request域中获取这些数据。

        ⭐好书推荐

        SpringMVC 域对象共享数据 第3张

        清华社【秋日阅读企划】领券立享优惠

        IT好书 5折叠加10元 无门槛优惠券:https://u.jd.com/Yqsd9wj

        活动时间:9月4日-9月17日,先到先得,快快来抢

        《Node.js从基础到项目实践(视频教学版)》

        SpringMVC 域对象共享数据 第4张

        【内容简介】

        《Node.js从基础到项目实践(视频教学版)》以理论结合实践的形式,讲解了Node.js 基础、框架、进阶知识和项目实践。本书为视频教学版,每一章节都有相对应的视频讲解,通过视频讲解可快速切入主题,提高学习效率。

        全书分为4 大部分,共13 章: 分别是Node.js 基础入门、Node.js 框架、Node.js 进阶以及企业项目实践。其中,第1~3 章为Node.js 基础入门讲解,包括Node.js 核心模块、自定义模块、第三方模块;第4~7 章为Node.js 框架讲解,包括Express 流行框架、MySQL 数据库、在Express 框架中操作MySQL 数据库以及Express 框架身份验证;第8~12 章为Node.js 进阶讲解,包括Node.js 事件循环、Koa 框架、socket.io、网络爬虫、GraphQL 基础语法;第13 章为企业项目实践讲解,使用Express 框架和MySQL 数据库完成x闻管理系统API 的开发。

        📚 京东购买链接:《Node.js从基础到项目实践(视频教学版)》

        📚 当当购买链接:《Node.js从基础到项目实践(视频教学版)》

        SpringMVC 域对象共享数据 第5张



免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,7463人围观)

还没有评论,来说两句吧...

目录[+]