第六节 属性域使用(request域、session域、application域)
1.request域
在SpringMVC中,当我们想把一个对象存入请求域有很多种操作方式,用哪一个都可以。
①使用Model对象
@RequestMapping("/requestAttrModel")
public String requestAttrModel(Model model) {
model.addAttribute("appleAttrName", "appleAttrValue");
return "result";
}
②使用ModelMap
@RequestMapping("/requestAttrModelMap")
public String requestAttrModelMap(ModelMap modelMap) {
modelMap.addAttribute("bananaAttrName", "bananaAttrValue");
return "result";
}
③使用Map
@RequestMapping("/requestAttrMap")
public String requestAttrMap(Map<String, Object> map) {
map.put("orangeAttrName", "orangeAttrValue");
return "result";
}
④使用HttpServletRequest
@RequestMapping("/requestAttrRequest")
public String requestAttrRequest(HttpServletRequest request) {
request.setAttribute("grapeAttrName", "grapeAttrName");
return "result";
}
2.session域
向session域存入数据,真正有效的办法只有一个
@RequestMapping("/sessionAttr")
public String sessionAttr(HttpSession session) {
session.setAttribute("sessionAttrName", "sessionAttrValue");
return "result";
}
3.application域
向application域存入数据需要先拿到ServletContext对象。前面介绍过获取ServletContext对象的两种方法。拿到ServletContext对象后调用setAttribute()方法。
servletContext.setAttribute(“appAttrName”,“appAttrValue”);
4.ModelAndView
在把数据存入请求域时还有一个方法:使用ModelAndView对象。
@RequestMapping("/modelAndView")
public ModelAndView testModelAndView() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("result");
modelAndView.addObject("mavAttrName", "mavAttrValue");
return modelAndView;
}
见名知意,ModelAndView就是把模型和视图封装到一起。其实即使我们没有明确使用ModelAndView,SpringMVC也会在handler方法执行完成后把模型和视图封装到ModelAndView对象中。
//检查handler方法的返回值是否为ModelAndView类型
if (returnValue instanceof ModelAndView) {
ModelAndView mav = (ModelAndView) returnValue;
//合并模型对象
mav.getModelMap().mergeAttributes(implicitModel);
return mav;
}
//检查handler方法的返回值是否为Model类型
else if (returnValue instanceof Model) {
//创建ModelAndView对象并将之前收集的模型对象存进去
return new ModelAndView().addAllObjects(implicitModel).addAllObjects(((Model) returnValue).asMap());
}
//检查handler方法的返回值是否为View类型
else if (returnValue instanceof View) {
//创建ModelAndView对象并存入视图和模型
return new ModelAndView((View) returnValue).addAllObjects(implicitModel);
}
//检查handler方法的返回值是否为Map类型
else if (returnValue instanceof Map) {
//创建ModelAndView对象并将之前收集的模型对象存进去
return new ModelAndView().addAllObjects(implicitModel).addAllObjects((Map<String, ?>) returnValue);
}
//检查handler方法的返回值是否为String类型
else if (returnValue instanceof String) {
//创建ModelAndView对象并把handler方法返回的字符串作为视图名称,且存入之前收集的模型数据
return new ModelAndView((String) returnValue).addAllObjects(implicitModel);
}
标签:
属性域的使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?