1.1 Controller 中的视图如何传给 jsp
- HttpServletRequest
1.添加依赖 提供HttpServletRequest request
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
2.request对象返回数据
@Controller
@RequestMapping("/Handler ")
public class ViewHandler {
@RequestMapping("/user")
public String card(HttpServletRequest request) {
List<User> list = Arrays.asList(
new User("sx1","宝乐1","c03"),
new User("sx2","宝乐2","c03"),
new User("sx3","宝乐3","c03"),
new User("sx4","宝乐4","c03")
);
//返回数据
request.setAttribute("list",list);
return "user";
}
}
3.引入jstl标签库
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
4.视图解析
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:forEach items="${list}" var="user">
${user.CNO}-${user.NAME}-${user.CLASS}<BR/>
</c:forEach>
</body>
</html>
5.结果
- Map
1.map对象返回数据,相当于换了个容器request换成map
@Controller
@RequestMapping("/handler")
public class ViewHandler {
@RequestMapping("/user")
public String card(Map<String,Object> map){
List<User> list = Arrays.asList(
new User("sx1","宝乐1","c03"),
new User("sx2","宝乐2","c03"),
new User("sx3","宝乐3","c03"),
new User("sx4","宝乐4","c03")
);
map.put("list",list);
return "user";
}
}
- Model
1.Model对象返回数据
@RequestMapping("/user")
public String card(Model model){
List<User> list = Arrays.asList(
new User("sx1","宝乐1","c03"),
new User("sx2","宝乐2","c03"),
new User("sx3","宝乐3","c03"),
new User("sx4","宝乐4","c03")
);
//返回数据
model.addAttribute("list",list);
return "user";
}
- ModelAndView
方法类型是ModelAndView ,视图和数据一起返回
@RequestMapping("/user")
public ModelAndView card(){
List<User> list = Arrays.asList(
new User("sx1","宝乐1","c03"),
new User("sx2","宝乐2","c03"),
new User("sx3","宝乐3","c03"),
new User("sx4","宝乐4","c03")
);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("list",list);
modelAndView.setViewName("user");
return modelAndView;
}
- @ModelAttribute
只适合单个对象的返回,遍历对象名为类型名的首字母大写转小写 User->user,而且无论请求哪个方法,首先访问的是此方法
@RequestMapping("/user")
public String list(){
return "user";
}
@ModelAttribute
public User user(){
User user = new User("sx1", "宝乐1", "c03");
return user;
}
<body>
${user.CNO}-${user.NAME}-${user.CLASS}<BR/>
</body>
- @SessionAttribute
SessionAttribute是将模型数据同步到session对象中,session和request都是JSP的内置对象。session的作用域为一个会话(打开浏览器发起请求到关闭浏览器的整个过程),用来保存用户的登录信息;request只能在一个请求中生效,请求结束则request销毁,数据丢失
当类中的业务方法向 request 中存入数据的同时,会自动将数据同步到 session 中,保留 request 中的key/value
1.在类定义出添加注解 User.class意思是当返回的是User对象时,自动同步到session中
@SessionAttributes(types = User.class)
public class ViewHandler {
2. 默认是从request里面去 ${requestScope.user}等同于${user},添加注解后,session也能取到数据
<body>
${requestScope.user}<br/>
${sessionScope.user}
</body>
3.结果