下面是我的学习笔记 这是我跟着B站的一位UP主学习的笔记,方便自己以后复习。
Spring MVC笔记目录
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>
- 今日份的学习笔记到此为止。