SpringMVC视图解析,就是将业务数据绑定给JSP域对象,并在客户端进行显示。
域对象:
pageContext、request、session、application
业务数据绑定是有ViewResolver 完成的;
SpringMVC提供了一下几种方式绑定业务数据:
1、Map
2、Model
3、ModelAndView
4、@sessionAttribute
5、@ModelAttribute
- 业务数据绑定到request域对象
Map
SpringMVC在内部使用Model接口存储业务数据,在调用业务方法之前会创建一个隐含对象作为业务数据的存储容器。设置业务方法的入参为Map类型,SpringMVC会将隐含对象的引用传递给入参。
开发者可以对模型中所有数据进行管理,包括访问和添加、修改、删除。
开发者只需要在业务方法处添加Map类型的入参,方法体中便可以通过对入参的操作来完成业务数据的添加。
访问http://localhost:7777/view/map
Model
与Map类似,业务方法通过入参来完成业务数据的绑定。
访问http://localhost:7777/view/model
HTTPServletRequest
访问http://localhost:7777/view/request
ModelAndView
与 Map、 Model 不同的是, ModelAndView 不但包含了业务数据,同时也包含了视图信息,将视图和业务数据进行了整合,封装成一个对象,如果使用 ModelAndView 来处理业务数据,业务方法的返回值必须是 ModelAndView 对象。
业务方法中对 ModelAndView 进行两个操作:
1、填充业务数据
2、绑定视图信息
访问http://localhost:7777/view/modelAndView
访问http://localhost:7777/view/modelAndView2
代码如下:
entity
package com.sunjian.entity; /** * @author sunjian * @date 2020/3/17 14:25 */ public class User { private Integer id; private String name; private Integer age; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
controller
package com.sunjian.controller; import com.sunjian.entity.Address; import com.sunjian.entity.User; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.View; import org.springframework.web.servlet.view.InternalResourceView; import javax.servlet.http.HttpServletRequest; import java.util.Map; /** * @author sunjian * @date 2020/3/17 19:17 */ @Controller @RequestMapping("/view") public class ViewController { @RequestMapping("/map") public String mapTest(Map<String, User> map){ User user = new User(); user.setId(7); user.setName("cronaldo"); user.setAge(35); map.put("user", user); return "show"; } @RequestMapping("/model") public String modelTest(Model model){ User user = new User(); user.setId(10); user.setName("meisi"); user.setAge(33); model.addAttribute("user", user); return "show"; } @RequestMapping("/request") public String request(HttpServletRequest request){ User user = new User(); user.setId(8); user.setName("kaka"); user.setAge(39); request.setAttribute("user", user); return "show"; } @RequestMapping("/modelAndView") public ModelAndView modelAndView(){ User user = new User(); user.setId(77); user.setName("buFeng"); user.setAge(41); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("user", user); modelAndView.setViewName("show"); return modelAndView; } @RequestMapping("/modelAndView2") public ModelAndView modelAndView2(){ User user = new User(); user.setId(77); user.setName("buFeng"); user.setAge(41); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("user", user); View view = new InternalResourceView("/show.jsp"); modelAndView.setView(view); return modelAndView; } }
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> ${user} </body> </html>