什么是域对象
域对象主要用于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(Mapmap){ 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> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南