posts - 14,comments - 0,views - 1215

什么是域对象

域对象主要用于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 map){
	map.put("testScope","hello,Map");
    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 on   Kyrie  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示