Spring MVC 视图解析机制

本文详细介绍了在Spring MVC框架中,如何通过不同方式从Controller向视图层传递数据,包括使用HttpServletRequest、Map、Model和ModelAndView对象,以及@ModelAttribute和@SessionAttribute注解的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值