springMvc4 - 模型数据解析

来源:https://www.bilibili.com/video/BV1GE411d7KE?p=6

上一节:https://blog.csdn.net/qq_40893824/article/details/107154193
下一节:https://blog.csdn.net/qq_40893824/article/details/107279867

JSP 4大作用域 对应内置对象:pageContext、request、session、application。

模型数据绑定由 ViewResolver 完成,实际开发中,需要先添加模型数据,再交给 ViewResolver 绑定

Spring MVC 添加模型数据的方式:
Map:模型数据直接加到 request 里
Model:模型数据直接加到 request 里
ModelAndView:模型数据直接加到 request 里
@SessionAttribute:模型数据直接加到 session 里
@ModelAttribute

绑定到 request 对象

Map

1 webapp 中,新建 view.jsp,加入代码:
<%@ page isELIgnored="false" %> 是否忽略表达式,不忽略,就是去解析
${requestScope.user}

2 controller 中,新建实现类 ViewHandler,加入代码:

package com.southwind.controller;

import com.southwind.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller
@RequestMapping("/view")
public class ViewHandler {
    @RequestMapping("/map")
    public String map(Map<String, User> map){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        map.put("user",user);
        return "view";
    }
}

3 启动 tomcat,进入 http://localhost:8080/view/map

Model

1 ViewHandler 中,添加代码:

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

2 启动 tomcat,进入 http://localhost:8080/view/model

ModelAndView

法1
1 ViewHandler 中,添加代码:

    @RequestMapping("/modelAndView")
    public ModelAndView modelAndView(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("view");
        return modelAndView;
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAndView

法2
1 ViewHandler 中,添加代码:

    @RequestMapping("/modelAndView2")
    public ModelAndView modelAndView2(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        View view = new InternalResourceView("/view.jsp");
        modelAndView.setView(view);
        return modelAndView;
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAndView2

法3
1 ViewHandler 中,添加代码:

    @RequestMapping("/modelAndView3")
    public ModelAndView modelAndView3(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        ModelAndView modelAndView = new ModelAndView("view");
        modelAndView.addObject("user", user);
        return modelAndView;
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAndView3

法4
1 ViewHandler 中,添加代码:

    @RequestMapping("/modelAndView4")
    public ModelAndView modelAndView4(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView = new ModelAndView(view);
        modelAndView.addObject("user", user);
        return modelAndView;
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAndView4

法5
1 ViewHandler 中,添加代码:

    @RequestMapping("/modelAndView5")
    public ModelAndView modelAndView5(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        Map<String,User> map = new HashMap<>();
        map.put("user", user);
        ModelAndView modelAndView = new ModelAndView("view",map);
        return modelAndView;
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAndView5

法6
1 ViewHandler 中,添加代码:

    @RequestMapping("/modelAndView6")
    public ModelAndView modelAndView6(){
        User user = new User();
        user.setId(1L);
        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;
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAndView6

法7
1 ViewHandler 中,添加代码:

    @RequestMapping("/modelAndView7")
    public ModelAndView modelAndView7(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        ModelAndView modelAndView = new ModelAndView("view","user",user);
        return modelAndView;
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAndView7

法8
1 ViewHandler 中,添加代码:

    @RequestMapping("/modelAndView8")
    public ModelAndView modelAndView8(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView = new ModelAndView(view,"user",user);
        return modelAndView;
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAndView8

HttpServletRequest

1 ViewHandler 中,添加代码:

    @RequestMapping("/request")
    public String request(HttpServletRequest request){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        request.setAttribute("user", user);
        return "view";
    }

2 启动 tomcat,进入 http://localhost:8080/view/request

@ModelAttribute

放在 实现类中,方法实现之前,先去运行带有 @ModelAttribute 注解的类
法1
1 ViewHandler 中,添加代码:

    @ModelAttribute
    public User getUser(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        return user;
    }

    @RequestMapping("/modelAttribute")
    public String modelAttribute(){
        return "view";
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAttribute

法2
1 ViewHandler 中,注释、添加代码:

    @ModelAttribute
    public void getUser(Map<String, User> map){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        map.put("user", user);
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAttribute

法3
1 ViewHandler 中,注释、添加代码:

    @ModelAttribute
    public void getUser(Model model){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        model.addAttribute("user", user);
    }

2 启动 tomcat,进入 http://localhost:8080/view/modelAttribute

绑定到 session 对象

原生 Servlet API

法1
1 ViewHandler 中,注释、添加代码:

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

2 在 view.jsp 中,添加代码:

	<hr/>
    ${sessionScope.user}

3 启动 tomcat,进入 http://localhost:8080/view/session

法2
1 ViewHandler 中,注释、添加代码:

    @RequestMapping("/session2")
    public String session2(HttpSession session){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        session.setAttribute("user", user);
        return "view";
    }

2 启动 tomcat,进入 http://localhost:8080/view/session

@SessionAttribute

它是全局的,尽量不用
数据添加到 session
法1
1 实现类前面加 @SessionAttributes(value = "user")

2 启动 tomcat,进入 http://localhost:8080/view/map

法2
1 实现类前面加 @SessionAttributes(types = User.class)

2 启动 tomcat,进入 http://localhost:8080/view/map

绑定多个:
@SessionAttributes(value = {"user","address"})
@SessionAttributes(types = {User.class,Address.class})

绑定 application 对象

1 ViewHandler 中,加入代码
前一个 session 可以直接构造
它不能直接构造 public String application(ServletContext application){}
因为 它没有无参构造的方法

    @RequestMapping("/application")
    public String application(HttpServletRequest request){
        ServletContext application = request.getServletContext();
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        application.setAttribute("user", user);
        return "view";
    }

2 view.jsp 中,加入代码:

    <hr/>
    ${applicationScope.user}

3 启动 tomcat,进入 http://localhost:8080/view/application

上一节:https://blog.csdn.net/qq_40893824/article/details/107154193
下一节:https://blog.csdn.net/qq_40893824/article/details/107279867

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1403034144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值