Spring MVC数据解析

JSP的四大作用域对象:pageContext、request、session、application

模型数据的绑定都是由ViewResolver来完成的,在实际开发中,我们需要先添加模型数据,再交给ViewResolver来绑定

在Spring MVC中,提供了一下几种方式添加模型数据:

  • Map
  • Model
  • ModelAndView
  • @SessionAttribute
  • @ModelAttribute

将模式数据绑定到 request 对象

1、Map

@RequestMapping("/map")
public String map(Map<String,User> map){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
    map.put("user",user);
    return "view";
}

JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${requestScope.user}
</body>
</html>

2、Model

@RequestMapping("/model")
public String model(Model model){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
    model.addAttribute("user",user);
    return "view";
}

3、ModelAndView

//方式1
@RequestMapping("/modelAndView")
public ModelAndView modelAndView(){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("user",user);
    modelAndView.setViewName("view");
    return modelAndView;
}

//方式2
@RequestMapping("/modelAndView2")
public ModelAndView modelAndView2(){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("user",user);
    View view = new InternalResourceView("/view.jsp");
    modelAndView.setView(view);
    return modelAndView;
}

//方式3
@RequestMapping("/modelAndView3")
public ModelAndView modelAndView3(){
    
    
	User user=new User();
	user.setId(1);
	user.setName("二狗子");
	ModelAndView modelAndView =new ModelAndView("view");
	modelAndView.addObject("user",user);
	return modelAndView;
}

//方式4
@RequestMapping("/modelAndView4")
public ModelAndView modelAndView4(){
    
    
	User user=new User();
	user.setId(1);
	user.setName("二狗子");
	View view=new InternalResourceView("/view.jsp");
	ModelAndView modelAndView =new ModelAndView(view);
	modelAndView.addObject("user",user);
	return modelAndView;
}

//方式5
public ModelAndView modelAndView5(){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
	Map<String,User> map=new HashMap<>();
	map.put("user",user);
	ModelAndView modelAndView = new ModelAndView("view",map);
	return modelAndView;
}
//方式6
@RequestMapping("/modelAndView6")
public ModelAndView modelAndView6(){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
    Map<String,User> map=new HashMap<>();
    map.put("user",user);
    View view = new InternalResourceView("/view.jsp");
    ModelAndView modelAndView = new ModelAndView(view,map);
    return modelAndView;
}

//方式7
@RequestMapping("/modelAndView7")
public ModelAndView modelAndView7(){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
    ModelAndView modelAndView = new ModelAndView("view","user",user);
    return modelAndView;
}

//方式8
@RequestMapping("/modelAndView8")
public ModelAndView modelAndView8(){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
    View view = new InternalResourceView("/view.jsp");
    ModelAndView modelAndView = new ModelAndView(view,"user",user);
    return modelAndView;
}

4、HttpServletRequest

@RequestMapping("/request")
public String request(HttpServletRequest request){
    
    
	User user=new User();
	user.setId(1);
	user.setName("二狗子");
	return "view";
}

5、@ModelAttribute: 定义一个方法,该方法专门用来返回要填充到模型数据中的对象

@ModelAttribute
public User getUser(){
    
    
	User user=new User();
	user.setId(1);
	user.setName("二狗子");
	return user;
}
@ModelAttribute
public void getUser(Map<String,User> map){
    
    
    User user = new User();
    user.setId(1);
    user.setName("二狗子");
    map.put("user",user);
}
@ModelAttribute
public void getUser(Model model){
    
    
    User user = new User();
    user.setId(1L);
    user.setName("张三");
    model.addAttribute("user",user);
}
  • 业务方法中无需再处理模型数据,只需返回视图即可。
@RequestMapping("/modelAttribute")
public String modelAttribute(){
    
    
   return "view";
}

将数据模型绑定到session对象

1、直接使用原生的servlet

@RequestMapping("/session")
public String session(HttpServletRequest request){
    
    
   HttpSession session=request.getSession();
   User user=new User();
   user.setId(1);
   user.setName("二狗子");
   session.setAttribute("user",user);
   return "view";
}

2、@SessionAttribute

@SessionAttributes(value={
    
    "user","address"})
public class ViewHandler(){
    
    

}

对于ViewHandler中的所有业务方法,只要想request中添加了key=“user”,key="address"的对象时,Spring MVC会自动将该数据添加到session中,保持key不变。

@SessionAttributes(types = {
    
    User.class,Address.class})
public class ViewHandler {
    
    
}

对于 ViewHandler 中的所有业务方法,只要向 request 中添加了数据类型是 User 、Address 的对象时,Spring MVC 会自动将该数据添加到 session 中,保存 key 不变。

将模型数据绑定到 application 对象

@RequestMapping("/application")
public String application(HttpServletRequest request){
    
    
	ServletContext application=request.getServletContext();
	User user=new User();
	user.setID(1);
	user.setName("二狗子");
	application.setAttribute("user",user);
    return "view";
}

猜你喜欢

转载自blog.csdn.net/weixin_47723535/article/details/108983956