在这里插入图片描述

SpringMVC

  1. Spring Web MVC就是Spring全家桶下的一个模块,现在通常把Spring Web MVC叫做Spring MVC
  2. Spring MVC:是一个 Web 框架
  3. Spring Boot:是一个 快速开发框架,它自动集成了 Spring MVC

Spring MVC 就是一个web的框架,用来做web的功能

MVC

  1. 什么是MVC ??
    MVC把一个项目分为了三个部分
    View就相当于前台,Controller就相当于团队,团队就指派某个人进行处理,Model就相当于某个人

下面是MVC的图
在这里插入图片描述
2. MVC是一种思想,Spring进行了实现,所以称为Spring MVC

下面是Spring MVC的图
在这里插入图片描述
3. SpringBoot是创建SpringMVC项目的一种方式而已
4. 当前阶段,MVC的概念又发生了一些变化,后端开发人员不涉及前端页面的开发,所以也就没有view层

view层又有了一层解释,之前返回的是视图,现在返回的是视图所需要的数据

下面返回的就可以是视图所要的数据:
在这里插入图片描述

学习Spring MVC

  1. 建立连接(客户端和服务器)
  2. 请求
  3. 响应

建立连接

  1. 通过 @RequestMapping 建立路由映射,通过tomcat找到服务器的地址
    在这里插入图片描述
  2. @RequestMapping 可以修饰方法,也可以修饰类
    访问地址:类的路径 + 方法路径

下图中访问的路径就是:127.0.0.1:8080/hello/sayhi
在这里插入图片描述
注意**:路径前面的 / 可以省略,比如 /hello,可以写成hello,建议统一都加上**
前面的 / 加上,后面的 / 不加上

@RequestMapping用的是get请求,还是post请求??
@RequestMapping默认支持所有的请求,也可以进行显示请求的方式

在这里插入图片描述

请求

  1. 请求,主要就是学习如何传参
    1.传递单个参数
    2.多个参数
    3.对象
    4.数组/集合

开发中,建议加上类路径
1.避免重复的方法
2.方便查找代码(在某个路径下就可以找到了)
在这里插入图片描述

  1. 传递单个参数
    需要名称一样
    底层逻辑:从请求的参数中,获取参数名为name的值,并给name赋值
    在这里插入图片描述
  2. 传递多个参数
    参数的类型在请求中位置不要求的,位置随便在哪都行
    在这里插入图片描述
    在这里插入图片描述
    如果参数中有基本类型,必须要传值,不传会报错

在这里插入图片描述
在这里插入图片描述

  1. 传递对象
    在这里插入图片描述
  2. 后端参数重命名
    后端对前端的参数进行了重命名
    在这里插入图片描述
    使用了required = false就不会出现报错
    在这里插入图片描述
    在这里插入图片描述
package com.example.demo.controller;

import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/param")
@RestController
public class ParamController {
    @RequestMapping("/m1")
    public String m1(String name){
        return "接收到的参数name: " + name;
    }


    // 方法名和路径名不要求一样
    @RequestMapping("/m2")
    public String m2(String name,Integer age){
        return "接收到的参数name: " + name + ",age: " + age;
    }

    // 传递一个对象
    @RequestMapping("/m3")
    public String m2(Person person){
        return "接收到的参数person: " + person.toString();
    }

    @RequestMapping("/m4")
    public String m4(@RequestParam(value = "name",required = false) String usename){
        return "接收到的参数name: " + usename;
    }
}

总结

对上面内容的一个总结:

在这里插入图片描述
6. 传递数组
当我们的请求,同一个参数有多个时,浏览器就会帮我们给封装成一个数组

比如下面两种传参的方式:
在这里插入图片描述

@RequestMapping("/m5")
    public String m5(String[] arrayParam){
        return "接收到的参数arrayParam: " + Arrays.toString(arrayParam) + ",长度为: " + arrayParam.length;
    }
  1. 传递集合
    @RequestParam让上传的参数变为不是非必须上传的,不上传的时候,值为null
    在这里插入图片描述

在这里插入图片描述

@RequestMapping("/m6")
    public String m5(@RequestParam List<String> listParam){
        return "接收到的参数arrayList: " + listParam + ",长度为: " + listParam.size();
    }
  1. 状态码都是后端去自定义的吗?
    不是的,状态码分为http状态码(不是后端自定义的),业务状态码(是后端自定义的)
    在这里插入图片描述

JSON传递数据

虽然介绍了这些传递参数的方法,但是我们工作中并不使用这些方法,而是使用JSON传递数据

  1. 接口指的是API
    就是应用程序提供了哪些服务给我们使用,接口如果对应到代码上,通常是指方法

  2. JSON本质上是一个字符串,表示对象的字符串(JSON字符串)

  3. 传递JSON数据,需要使用@RequestBody
    把整个正文传给这个对象
    @RequestBody获取请求正文中的数据
    在这里插入图片描述
    在这里插入图片描述

// 通过json请求进行传递
    @RequestMapping("/m7")
    public String m7(@RequestBody Person person){
        return "接收到的参数person: " + person.toString();
    }

获取url中的参数

@PathVariable获取url中的参数时使用

  1. 可以获取url中的一个参数
    在这里插入图片描述
  2. 可以获取url中的多个参数,但是要注意顺序要一致
    在这里插入图片描述
  3. 可以对参数进行重命名,但是路径上的参数的名字和下面括号中参数的名字要一致
    在这里插入图片描述
 @RequestMapping("/m8/{useId}/{name}")
    public String m8(@PathVariable Integer useId,@PathVariable("name") String usename){
        return "useId: " + useId + "name: " + usename;
    }

上传文件@RequestPart

  1. 上传图片

在这里插入图片描述

在这里插入图片描述

  1. 还可以上传图片到本机中的指定路径或者是指定的文件服务器中
// 上传文件
    @RequestMapping("/m9")
    public String m9(@RequestPart MultipartFile file) throws IOException {
        // 打印文件名字
        System.out.println(file.getOriginalFilename());
        // 把上传的图片进行保存到本地电脑或者是专门的文件服务器中
        file.transferTo(new File("E:/文件夹/" + file.getOriginalFilename()));
        return "success";
    }

Cookie和Session

  1. Http是无状态的,http没有记忆功能,现在请求和过一会请求,同样的请求参数,得到的结果这个结果是指处理逻辑是一样的,而不是指数据是一样的)是一样的
  2. Cookie 客户端机制,比如存储学生证中的id身份信息
    Session 服务端机制

在这里插入图片描述

获取Cookie

  1. 使用servlet的方式获取cookie,可以获取全部的cookie
// 获取Cookie
    @RequestMapping("/getCookie")
    public String getCookie(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
//        for(Cookie cookie : cookies){
//            System.out.println("name: " + cookie.getName() + "Value: " + cookie.getValue());
//        }

        // lambda的写法
        if(cookies != null) {
            Arrays.stream(cookies).forEach(cookie -> {
                System.out.println("name: " + cookie.getName() + "Value: " + cookie.getValue());
            });
        }

        return "获取Cookie的值成功";
    }

在这里插入图片描述

在这里插入图片描述
2. 使用Spring的方式获取Cookie(使用注解的方式),只能一个一个cookie去拿

 @RequestMapping("/getCookie")
    public String getCookie(@CookieValue String abc){
        return "cookie的值为: " + abc;
    }

在这里插入图片描述
也可以传多个注解的Cookie参数

在这里插入图片描述

获取Session

  1. 使用Servlet的方式获取Session

在这里插入图片描述

// 构造一个Session对象
    @RequestMapping("/setSession")
    public String setSesion(HttpServletRequest request){
        HttpSession session = request.getSession();
        session.setAttribute("usename","zhangsan");

        return "success";
    }

    // 获取Session
    @RequestMapping("/getSession")
    public String getSession(HttpServletRequest request){
        // 为true就是没有session,也会创建一个session对象
        // 为false就是没有session,不会创建一个session对象
        HttpSession session = request.getSession(false);
        if(session != null){
            String usename = (String)session.getAttribute("usename");
            return "登录用户: " + usename;
        }

        return "session为空";
    }

在这里插入图片描述

  1. 使用Spring的方式获取Session
    session是存在服务器的内存中的,每次进行刷新,session之前设置的值都会清空
@RequestMapping("/getSession2")
    public String getSession2(@SessionAttribute(required = false) String usename){
        // 在@SessionAttribute下,usename为必传的
        return "usename: " + usename;
    }

在这里插入图片描述
3. 第三种获取Session的方式
HttpSession是内置的接口

@RequestMapping("/getSession3")
    public String getSession3(HttpSession session){
        String usename = (String) session.getAttribute("usename");
        return "usename: " + usename;
    }

在这里插入图片描述

获取Header

  1. Servlet提供的获取Header的方式
// 获取Header
    @RequestMapping("/getHeader")
    public String getHeader(HttpServletRequest request){
        String useAgent = request.getHeader("User_Agent");

        return "User_Agent " + useAgent;
    }

在这里插入图片描述

  1. Spring提供的获取Header的方式
@RequestMapping("/getHeader2")
    public String getHeader2(@RequestHeader("User_Agent") String useAgent){
        return "User_Agent " + useAgent;
    }

在这里插入图片描述

学会看错误日志:
在这里插入图片描述
获取 Header 中的Host(指的是网络中的一台计算机或设备,而域名是用于标识和定位这些设备的字符串)信息:
在这里插入图片描述

总结

  1. 对上面内容的总结:
    在这里插入图片描述
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐