Java学习之SpringMVC(3)


下面是我的学习笔记 这是我跟着B站的一位UP主学习的笔记,方便自己以后复习。

先上学习链接



Spring MVC 模型数据解析(将模型数据绑定到request中)

  • JSP 四大作用于对应的内置对象:pageContext request session application

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

  • Spring MVC 提供了以下几种方式添加模型数据:(都是向request添加的,request是我们常用的域对象)

Map
Model
ModelAndView
@SessionAttribute
@ModelAttribute

  • 提一句 JSP虽然用的不多,过时之说,但是了解一下没有坏处。

Map

  • 目的是 把User 返回给 view.jsp文件 在view.jsp中进行解析
  • Map 类型的数据会自动传给 .jsp 文件
@RequestMapping("/map")
    public String map(Map<String, User> map) {
        User user = new User();
        user.setId(1);
        user.setName("老白");
        map.put("user", user);
        return "view";
    }

Model

  • 和Map 的用法差不多
  • 选择 ui 结尾的 model 包
@RequestMapping("/model")
    public String model(Model model) {
        User user = new User();
        user.setId(2);
        user.setName("老白啊");
        model.addAttribute("user", user);
        return "view";
    }

ModelAndView

  • ModelAndView 有多种方法
//    第一种 ModelAndView
    @RequestMapping("modelandview")
    public ModelAndView modelAndView() {
        User user = new User();
        user.setId(3);
        user.setName("老白");
//      创建一个 ModelAndView 对象
        ModelAndView modelAndView = new ModelAndView();
//      添加 模型数据
        modelAndView.addObject("user", user);
//      定义视图名字
        modelAndView.setViewName("view");
        return modelAndView;
    }

    //    第二种 ModelAndView
    @RequestMapping("/modelandview2")
    public ModelAndView modelAndView_1() {
        User user = new User();
        user.setId(4);
        user.setName("老白");
//      创建一个 ModelAndView 对象
        ModelAndView modelAndView = new ModelAndView();
//      添加模型数据
        modelAndView.addObject("user", user);
//      视图的创建
        View view = new InternalResourceView("/view.jsp");
        modelAndView.setView(view);
        return modelAndView;
    }

    //    第三种ModelAndView
    @RequestMapping("modelandview3")
    public ModelAndView modelAndView_2() {
        User user = new User();
        user.setId(5);
        user.setName("老白");
        ModelAndView modelAndView = new ModelAndView("view");
        modelAndView.addObject("user", user);
        return modelAndView;
    }

    //    第四种ModelAndView
    @RequestMapping("modelandview4")
    public ModelAndView modelAndView_3() {
        User user = new User();
        user.setId(6);
        user.setName("老白");
        //    必须是存在 的物理路径 和文件
        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView = new ModelAndView(view);
        modelAndView.addObject("user", user);
        return modelAndView;
    }

    //    第五种ModelAndView
    @RequestMapping("modelandview5")
    public ModelAndView modelAndView_4() {
        User user = new User();
        user.setId(7);
        user.setName("老白");
        Map<String, User> map = new HashMap<>();
        map.put("user", user);
        ModelAndView modelAndView = new ModelAndView("view", map);
        return modelAndView;
    }

    //    第六种ModelAndView
    @RequestMapping("modelandview6")
    public ModelAndView modelAndView_5() {
        User user = new User();
        user.setId(8);
        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;
    }

    //    第七种ModelAndView
    @RequestMapping("modelandview7")
    public ModelAndView modelAndView_6() {
        User user = new User();
        user.setId(9);
        user.setName("老白");
        ModelAndView modelAndView = new ModelAndView("view", "user", user);
        return modelAndView;
    }

    //    第八种ModelAndView
    @RequestMapping("modelandview8")
    public ModelAndView modelAndView_7() {
        User user = new User();
        user.setId(10);
        user.setName("老白");
        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView = new ModelAndView(view, "user", user);
        return modelAndView;
    }

@ModelAttribute注解

  • Model
  • 只要它执行 首先创建这个对象 向 request 里面添加
  • 定义一个方法 专门用来返回 User对象
  • 一个是有返回值的
  • 一个没有返回值,无返回值可以在形参中定义Map 或者 Model
    @ModelAttribute
    public User getUser(){
        User user = new User();
        user.setId(12);
        user.setName("老白");
        return user;
    @ModelAttribute
    public void getUser(Map<String ,User> map){
        User user = new User();
        user.setId(12);
        user.setName("老白");
        map.put("user",user);
    }
@ModelAttribute
    public void getUser(Model model) {
        User user = new User();
        user.setId(12);
        user.setName("老白");
        model.addAttribute("user", user);
    }
  • view
//    业务方法中无需再处理模型 只需要返回视图就好了
    @RequestMapping("/modelattribute")
    public String modelAttribute() {
        return "view";
    }

使用原生的方法request

 //      直接使用原生的方法request 将数据装入模型中  HttpServletRequest
    @RequestMapping("/request")
    public String request(HttpServletRequest httpServletRequest) {
        User user = new User();
        user.setId(11);
        user.setName("老白");
        httpServletRequest.setAttribute("user", user);
        return "view";
    }

将模型数据绑定到Session中

使用原生的servlet API

  • 通过request 绑定 session
//    从Request对象中拿到Session  这是原生方式
    @RequestMapping("/session")
    public String session(HttpServletRequest request){
//       向 session 添加
        HttpSession session = request.getSession();
        User user = new User();
        user.setId(13);
        user.setName("老白");
        session.setAttribute("user",user);
        return "view";
    }
  • 直接向 Session 中添加 不需要经过 request
//      直接向 session 里面添加 不需要经过 request
    @RequestMapping("/session2")
    public String session2(HttpSession session){
        User user = new User();
        user.setId(14);
        user.setName("老白");
        session.setAttribute("user",user);
        return "view";
    }

@SessionAttribute 注解

// 一般不常用  这是通过类对像添加的注解
@SessionAttributes(value = "user")    通过名字去添加  这是通过全局的 了解就好
@SessionAttributes(value = "user")    会针对所有方法 方法中将 user 传入 request 中,
同时也会存入 session 中,例如 value = "user" 和 map.put("user", user) 对应,
对应的是双引号里面的 user. 这个应该叫做 key 值
@SessionAttributes(types = User.class)    通过类对象添加

@SessionAttributes(value = {"user","adress"})
@SessionAttributes(types = {User.class,Adress.class})

通过 request 间接获取 application

//通过 request 间接获取 application
    //将数据模型绑定到 application 对象
    @RequestMapping("/application")
    public String application(HttpServletRequest request){
        ServletContext application = request.getServletContext();
        User user = new User();
        user.setId(15);
        user.setName("老白");
        application.setAttribute("user", user);
        return "view";
    }

ViewHander.java 和 view.jsp

ViewHander.java

package com.southwind.controller;

import com.southwind.controller.userValue.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
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.HashMap;
import java.util.Map;

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

    @RequestMapping("/model")
    public String model(Model model) {
        User user = new User();
        user.setId(2);
        user.setName("老白啊");
        model.addAttribute("user", user);
        return "view";
    }
    @RequestMapping("modelandview")
    public ModelAndView modelAndView() {
        User user = new User();
        user.setId(3);
        user.setName("老白");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("view");
        return modelAndView;
    }
    @RequestMapping("/modelandview2")
    public ModelAndView modelAndView_1() {
        User user = new User();
        user.setId(4);
        user.setName("老白");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        View view = new InternalResourceView("/view.jsp");
        modelAndView.setView(view);
        return modelAndView;
    }
    @RequestMapping("modelandview3")
    public ModelAndView modelAndView_2() {
        User user = new User();
        user.setId(5);
        user.setName("老白");
        ModelAndView modelAndView = new ModelAndView("view");
        modelAndView.addObject("user", user);
        return modelAndView;
    }
    @RequestMapping("modelandview4")
    public ModelAndView modelAndView_3() {
        User user = new User();
        user.setId(6);
        user.setName("老白");
        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView = new ModelAndView(view);
        modelAndView.addObject("user", user);
        return modelAndView;
    }
    @RequestMapping("modelandview5")
    public ModelAndView modelAndView_4() {
        User user = new User();
        user.setId(7);
        user.setName("老白");
        Map<String, User> map = new HashMap<>();
        map.put("user", user);
        ModelAndView modelAndView = new ModelAndView("view", map);
        return modelAndView;
    }
    @RequestMapping("modelandview6")
    public ModelAndView modelAndView_5() {
        User user = new User();
        user.setId(8);
        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;
    }
    @RequestMapping("modelandview7")
    public ModelAndView modelAndView_6() {
        User user = new User();
        user.setId(9);
        user.setName("老白");
        ModelAndView modelAndView = new ModelAndView("view", "user", user);
        return modelAndView;
    }

    @RequestMapping("modelandview8")
    public ModelAndView modelAndView_7() {
        User user = new User();
        user.setId(10);
        user.setName("老白");
        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView = new ModelAndView(view, "user", user);
        return modelAndView;
    }
    @RequestMapping("/request")
    public String request(HttpServletRequest httpServletRequest) {
        User user = new User();
        user.setId(11);
        user.setName("老白");
        httpServletRequest.setAttribute("user", user);
        return "view";
    }
//    @ModelAttribute
//    public User getUser(){
//        User user = new User();
//        user.setId(12);
//        user.setName("老白");
//        return user;
//    }
//    @ModelAttribute
//    public void getUser(Map<String ,User> map){
//        User user = new User();
//        user.setId(12);
//        user.setName("老白");
//        map.put("user",user);
//    }
    @ModelAttribute
    public void getUser(Model model) {
        User user = new User();
        user.setId(12);
        user.setName("老白");
        model.addAttribute("user", user);
    }
    @RequestMapping("/modelattribute")
    public String modelAttribute() {
        return "view";
    }
}
//    从Request对象中拿到Session  这是原生方式
    @RequestMapping("/session")
    public String session(HttpServletRequest request){
//       向 session 添加
        HttpSession session = request.getSession();
        User user = new User();
        user.setId(13);
        user.setName("老白");
        session.setAttribute("user",user);
        return "view";
    }
//      直接向 session 里面添加 不需要经过 request
    @RequestMapping("/session2")
    public String session2(HttpSession session){
        User user = new User();
        user.setId(14);
        user.setName("老白");
        session.setAttribute("user",user);
        return "view";
    }


view.jsp

<%--
  Created by IntelliJ IDEA.
  User: 老白
  Date: 2020/5/6
  Time: 13:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%--是否忽略 EL 表达式--%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--session 传值--%>
Session:
${sessionScope.user}
<br>
Requset:
<%--request 传值--%>
${requestScope.user}
<br>
Application:
${applicationScope.user}
</body>
</html>


  • 今日份的学习笔记到此为止。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值