e06")
public String test06(Master master, Map<String, Object> map) {
//需求是通过map对象,添加属性到request域中
map.put("address", "tianjin");
//原理分析:springmvc会遍历map,将map中的k-v存放到request域中
//因此你会发现在转发页面中,直接通过${requestScope.address}也可以获取address的数据
return "vote_ok";
}
model_data.jsp不变
vote_ok.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>vote_ok</title>
</head>
<body>
<h1>取出request域中的信息</h1>
主人的address=${requestScope.address}
主人的id=${requestScope.master.id}
主人的名字=${requestScope.master.name}
宠物的id=${requestScope.master.pet.id}
宠物的名字=${requestScope.master.pet.name}
</body>
</html>
model_data.jsp:
vote_ok.jsp:
注意事项:
-
我们知道,表单提交的数据会被springmvc自动封装成对象,并放入request域中。而且springmvc会扫描map,将里面的k-v也放到request域中。
-
这意味着,如果map的中某个key和之前自动封装的对象同名,那么在springmvc扫描map的时候,原先的request的对象的属性值会被map中同名key的value值覆盖。
1.3方式3-通过返回ModelAndView对象实现request域数据
- 表单数据被springmvc封装到master对象
- master对象被springmvc封装到request域中
- ModelAndView的属性也会被springmvc放入到request域中
- 因此转发的页面中可以通过request域获取到所有数据
修改 VoteHandler.java:
//演示通过返回ModelAndView对象,将数据放入到request域中
@RequestMapping(value = "/vote07")
public ModelAndView test07(Master master) {
ModelAndView modelAndView = new ModelAndView();
//放入属性到 ModelAndView对象
modelAndView.addObject("address", "shanghai~~");
//指定要跳转的视图名称
modelAndView.setViewName("vote_ok");
return modelAndView;
}
model_data.jsp不变
vote_ok.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>vote_ok</title>
</head>
<body>
<h1>取出request域中的信息</h1>
主人的address=${requestScope.address}
主人的id=${requestScope.master.id}
主人的名字=${requestScope.master.name}
宠物的id=${requestScope.master.pet.id}
宠物的名字=${requestScope.master.pet.name}
</body>
</html>
model_data.jsp:
vote_ok.jsp:可以看到在ModelAndView中的数据已经被放入到了request对象中,因此可以直接获取
注意事项:
-
从本质上看,请求响应的方return "xxx",只是返回了一个字符串,其实本质上底层是返回了一个ModelAndView 对象,只是默认被封装起来了。
-
ModelAndView 既可以包含 model 数据,也可以包含视图信息。
-
ModelAndView 对象的 addObject 方法可以添加key-val数据,添加的数据默认被 springmvc 扫描放在request域中。
-
ModelAndView 对象的 setView 方法可以指定视图名称。
-
这里ModelAndView 被 springmvc 扫描,将属性放入request域中的操作,和之前map被springmvc扫描非常相似。同样的,ModelAndView中的属性被放入request域中时,如果request域中已经有同名属性了,那么将会进行覆盖操作。
2.数据放入session
- 说明:开发中,控制器/处理器中获取的数据如何放入session域,然后在前端(vue/jsp/...)取出显示?
应用实例
仍然以之前的例子说明:
-
model_date.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>model_data</title>
</head>
<body>
<h1>添加信息[测试session]</h1>
<form action="vote/vote08" method="post">
主人id:<input type="text" name="id"/><br/>
主人名:<input type="text" name="name"/><br/>
宠物id:<input type="text" name="pet.id"/><br/>
宠物名:<input type="text&quo