Spring Web MVC

目录

一.简介

二.建立连接(客户端和服务器)

三.请求

1.传递单个参数

2.传递多个参数

3.对象

4.数组/集合

5.JSON

6.URL参数

7.上传文件

8.获取cookie和session

(1)获取cookie

(2)获取session

9.设置header

四.响应

1.返回静态页面

2.返回数据

3.返回HTML代码片段

4.返回JSON

5.设置状态码

6.设置Header


一.简介

Spring Web MVC是包含在Spring框架中的用来构造web项目的框架,底层基于Servlet API.

(之前使用的SpringBoot也是创建Spring MVC的一种方式)

MVC(model view controller):把一个项目分成三部分,三部分之间的关系如下

Spring进行实现MVC模式,称为Spring MVC

二.建立连接(客户端和服务器)

@Requestmapping (路由映射):可以修饰方法,也可以修饰类。

访问地址:类的路径+方法路径

修饰方法

修饰类

在postman中观察可得:@Requestmapping支持get请求、post请求...

当想要指定一个具体的方法时,在代码中进行调整。

三.请求

1.传递单个参数

2.传递多个参数

发送请求的参数名称可以调换

注意:在代码中定义类型尽量使用包装类型(int的包装类为Integer),使用基本类型时,当输入的变量为空时会报错,而包装类型会显示为空。

3.对象

单独定义一个对象类,更方便后期根据需求修改代码。

java 复制代码
package com.example.demo.controller;

public class Person {
    Integer id;
    String name;
    Integer age;

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

后端参数重命名

前端传参是@requesPrama()中的

4.数组/集合

数组

当请求中同一个参数有多个时,浏览器就会帮我们封装成一个数组。

集合

默认传递的参数是数组形式,要是想要传递一个集合的形式,需要在参数前面加上**@RequestParam**

5.JSON

json本质上是一个字符串,表示对象的字符串。

传递json数据,需要使用**@RequestBody**

6.URL参数

获取一个url中的参数需要一个**@PathVariable**,获取多个url中的参数需要多个@PathVariable

需要注意顺序,顺序要与参数相匹配,参数个数也需要匹配

URL参数中的重命名

7.上传文件

@RequestPart

将图片上传到指定位置

8.获取cookie和session

(1)获取cookie

1)spring中获取指定个数的cookie,使用**@CookieValue**

2)获取多个cookie的方式(不是spring,采用最原始的方式,在控制台获取value值)

java 复制代码
    //获取多个cookie的方式
    @RequestMapping("getCookie")
    public String getCookie(HttpServletRequest request){
        Cookie[] cookies=request.getCookies();
//  两种写法
//        for (Cookie cookie : cookies) {
//            System.out.println(cookie.getName()+":"+cookie.getValue());
//        }
        //空指针异常处理
        if(cookies!=null){
            Arrays.stream(cookies).forEach(cookie -> {
                System.out.println(cookie.getName()+":"+cookie.getValue());
            });
        }
        return "获取cookie成功";
    }

(2)获取session

1)普通方式

java 复制代码
    //设置session
    @RequestMapping("/setSession")
    public String setSession(HttpServletRequest request){
        //创建session
        HttpSession session= request.getSession();
        //给session赋值
        session.setAttribute("username","swy");
        return "success";
    }
    //获取session
    @RequestMapping("/getSession")
    public String getSession(HttpServletRequest request){
        //session默认为true,没有session会自动创建一个,设置成false避免自动创建
        HttpSession session= request.getSession(false);
        if(session!=null){
            String username=(String) session.getAttribute("username");
            return "登录用户:"+username;
        }
        return "session为空!";

2)spring方式

@SessionAttribute

java 复制代码
    @RequestMapping("/getSession2")
    //默认是一个必传参数
    public String getSession2(@SessionAttribute(required = false) String username){
        return "username:"+username;
    }

3)使用HttpSession的方式

9.设置header

1)原始方式

2)spring方式

@RequestHeader

以上:

1.传递数组:同一个请求参数有多个时,会自动封装成数组

2.传递集合:@RequestParam

3.传递JSON:@RequestBody

4.上传文件:@RequestPart

5.Cookie :@CookieValue

6.Session:@SessionAttribute

7.Header:@RequestHeader

8.url:@PathVariable

9.文件:@RequestPart

四.响应

1.返回静态页面

1)创建一个简单的html页面

2)返回该页面

@Controller和@RestController

2.返回数据

@ResponseBody

可以修饰类、可以修饰方法。修饰类的时候,表示这个类下的所有方法,返回的均为数据。修饰方法时,表示该方法返回的是数据。

如果一个类中返回的都是数据则把注释加在类上,如果一个类中只有相对应的方法中返回数据,则把该注释添加在相对应的方法上。

3.返回HTML代码片段

4.返回JSON

当返回的接口是String类型、Integer类型时,content-Type是text/html

当接口返回的是对象/Map时,content-Type自动设置成application/json

这里举例是返回一个对象:

5.设置状态码

设置状态码与页面展示无关

6.设置Header

平时很少用到

举例:设置header的返回类型属性:

举例:自定义header属性

相关推荐
克拉克盖博1 小时前
chapter03_Bean的实例化与策略模式
java·spring·策略模式
小兔兔吃萝卜6 小时前
Spring 创建 Bean 的 8 种主要方式
java·后端·spring
AAA修煤气灶刘哥8 小时前
面试官: SpringBoot自动配置的原理是什么?从启动到生效,一文讲透
后端·spring·面试
qq_三哥啊10 小时前
【IDEA】设置Debug调试时调试器不进入特定类(Spring框架、Mybatis框架)
spring·intellij-idea·mybatis
别惹CC10 小时前
Spring AI 进阶之路01:三步将 AI 整合进 Spring Boot
人工智能·spring boot·spring
寒士obj10 小时前
Spring事物
java·spring
IT毕设实战小研19 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
甄超锋20 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
Java小白程序员1 天前
Spring Framework:Java 开发的基石与 Spring 生态的起点
java·数据库·spring
甄超锋1 天前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven