SpringMVC入门学习(七)----将数据放入域对象中 (request、session、application)
1、Request域
在SpringMVC中,一般在进行页面跳转时,都会带上该处理器处理完成的数据。我们都知道,SpringMVC的底层是封装了Servlet的代码,所以在SpringMVC中可以使用Servlet中的域对象,当然SpringMVC也额外给我们封装一些其它的域对象供我们使用,如Model、ModelMap。
注:Model、ModelMap和Map的底层其实都是封装了Request请求。
①、使用Model对象
在方法中将Model以形参的形式设置,使用addAttribute设置要传输的数据(注意是addAttribute属性,不是setAttribute)。返回值就是页面名称,这种方式比较常用。
@RequestMapping("/requestAttrModel")
public String requestAttrModel(Model model) {
model.addAttribute("username", "张三");
model.addAttribute("password", "123456");
return "success";
}
②、使用ModelMap
ModelMap 是个Map集合可以使用Map的基本功能,ModelMap 也定义了addAttribute()方法
@RequestMapping("/requestAttrModelMap")
public String requestAttrModelMap(ModelMap modelMap) {
modelMap.addAttribute("username", "张三");
modelMap.put("password","123456");
return "success";
}
③、使用Map
@RequestMapping("/requestAttrMap")
public String requestAttrMap(Map<String, Object> map) {
map.put("mapName", "mapValue");
return "success";
}
④、使用HttpServletRequest
这是Servlet中原生的Request域对象。
@RequestMapping("/requestAttrRequest")
public String requestAttrRequest(HttpServletRequest request) {
request.setAttribute("grapeAttrName", "grapeAttrName");
return "success";
}
2、Session域
向session域存入数据,真正有效的办法只有一个,直接使用Servlet原生的Session域对象
@RequestMapping("/sessionAttr")
public String sessionAttr(HttpSession session) {
session.setAttribute("sessionAttrName", "sessionAttrValue");
return "success";
}
3、Application域
向application域存入数据需要先拿到ServletContext对象。前面介绍过获取ServletContext对象的两种方法。拿到ServletContext对象后调用setAttribute()方法,即可,用的比较少,可以用来加载网页中不经常改变的数据。
@Autowired
private ServletContext servletContext;
@RequestMapping("/application/scope")
public String applicationScope() {
servletContext.setAttribute("appName", "appValue");
return "success";
}
4、ModelAndView(推荐)
ModelAndView我们平时中使用的最多的,它表示封装了ModelMap请求域和视图的对象(即数据模型+视图)。使用步骤如下所示:
- 首先new一个ModelAndView实例
- 使用addObject()设置需要像页面传输的数据
- 使用setViewName()设置需要跳转的视图页面
- 最后将ModelAndView对象返回
- 这样前台就可以通过EL表达式${name}获取数据了
@RequestMapping("/modelAndView")
public ModelAndView testModelAndView() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("mavAttrName1", "mavAttrValue1");
modelAndView.addObject("mavAttrName2", "mavAttrValue2");
modelAndView.setViewName("success");
return modelAndView;
}
如果要在ModelAndView中使用转发和重定向也可以在setViewName()中设置。
//转发
modelAndView.setViewName("forward:/WEB-INF/pages/show.jsp");
//重定向,注:重定向不能访问/WEB-INF资源,因为是两次请求
modelAndView.setViewName("redirect:/hello.jsp");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!