域对象的共享数据

什么是域对象

域对象主要用于web应用中,负责存储数据,通俗的讲就是这个对象本身存储一定范围内的所有数据,通过他就能获取和存储数据,可以理解为万能的一个属性,只要调用他就可以获得这个范围(域)内的想要的数据,可以修改删除数据,当然也可以给这个域添加数据

域对象分类

根据作用域的不同分类:

  • PageContext 存在于jsp文件中,自己本身作为域对象可以存储和查询修改数据,但是目前基本不在应用jsp,不做过多讲解
  • HttpServletRequest请求域对象,只有一次请求,所以相同的请求域可以用来存储数据并传输域对象共有的方法
  • session域对象,在同一个客户访问服务器时,如果发生了响应重定向,则之前的request域中存在的数据就会丢失,所以出现session域对象,用来记录是否是同一个客户进行访问,进行会话跟踪,并进行数据存储和获取
  • ServletContext域 公共接口类型,作用域整个web项目,用来获取和存储web中的数据,ServletContext接口对象是随着web项目的加载而创建的,每个web项目都有一个ServletContext,因此在进行不同的Servlet对象之间传递数据时可以使用ServletContext域对象

域对象共享数据:

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

 

@RequestMapping("/testServletAPI)
public String testServletAPI(HttpServletRequest request){
    request.setAttribute("testScope","hello,servletAPI")
    return "success";
}

 

就是转发

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

复制代码
@RequestMapping("/testModelAndView)
public ModelAndView testModelAndView(){
	ModelAndView mav = new ModelAndView();
	mav.addObject("testScope","hello,ModelAndView");
	mav.setViewName("success");
    return mav;
}
复制代码

 

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

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

 

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

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

 

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

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

 

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

public interface Model{}
public class ModelMap extends LinkedHashMap<String,Object>{}
public class ExtendedModelMap extends ModelMap implements Model{}
public class BindingAwareModelMap extends ExtendedModelMap{}

 

控制器执行后都会返回一个统一的ModelAndView的对象,所以SpringMVC建议的是使用ModelAndView,同时,对于原生的ServletAPI不建议使用

6、向session域对象共享数据

1
2
3
4
5
@RequestMapping("/testSession")
public String testSession(HttpSession session){
    session.setAttribute("testScope","hello,Session");
    return "success";
}

  

在Thymeleaf中,对于session的数据获取应该为:

1
<p th:text="${session.testScope}"></p>

  

向application域共享数据(ServletContext)

1
2
3
4
5
6
@RequestMapping("/testApplication")
public String testApplication(HttpSession session)
    ServletContext application = session.getServletContext();
    application.setAttribute("testScope","hello,application");
    return "success";
}

  

在Thymeleaf中,对于application的数据获取应该为:

1
<p th:text="${application.testScope}"></p>

  

posted @ 2022-11-23 17:02  sugeek  阅读(83)  评论(0)    收藏  举报