Spring MVC

1.什么是SSM

SSM其实就是Spring Spring MVC MyBatis.Spring +Spring MVC+ MyBatis是一种常见的 Java 企业级开发框架组合,用于构建基于 ​MVC 设计模式​ 的 Web 应用程序。

各模块的作用:

  • Spring

    • 核心功能:依赖注入(DI)、面向切面编程(AOP)、事务管理等。
    • 用途:统一管理对象的生命周期和依赖关系,降低代码耦合度。
  • Spring MVC

    • 核心功能:处理 HTTP 请求、响应、控制器(Controller)、视图解析等。
    • 用途:实现 Web 层的逻辑控制,将用户请求转发到对应的业务逻辑。
  • MyBatis

    • 核心功能:动态 SQL 映射、数据库持久化操作。
    • 用途:简化 JDBC 操作,通过 XML 或注解定义 SQL 语句,避免手动拼接 SQL

接下来我们介绍下Spring MVC.

2.什么是Spring MVC

(a).MVC

MVC是一种软件设计架构模式.他把软件系统分为模型,视图,和控制器三个部分.

这种设计模式就是首先用户通过视图发送请求,此时控制器接收到请求之后会交给模型处理,处理完成后会返回结果给控制器,控制器再将结果返回给视图

View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.

Model(模型) 是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.

Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型

来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型

就像是我们去饭馆吃饭.服务员会将我们点的饭菜告诉柜台的收银人员,收银人员将菜单交给后厨,后厨只是负责做菜就可以,做完以后交给收银员,收银员交给服务员.最终我们到我们手里

上面的例子中

View(视图):就类似服务员,负责将我们的请求传递给收银员,并且最终给我们返回结果

Model(模型):就像是厨师,不关心外面的流程,只需要安心炒菜

Controller(控制器):就像是收银员,也就是服务员和后厨的中间人.有了中间人就可以就可以让他们进行交流.

(b).Spring MVC和MVC的关系

Spring MVC是基于MVC这种设计模式实现的.

(c).Spring Web MVC

Spring MVC的全称是Spring Web MVC.就是基于Spring MVC这种设计模式应用于网站开发.

Spring Web MVC ​ 是 Spring 框架中用于实现 ​Web 层控制 ​ 的核心模块,属于 ​MVC 设计模式​ 的具体实现。它通过清晰的职责划分和高度灵活的配置,简化了 Web 应用的开发流程。

2.创建Spring项目

1.在idea上创建

首先创建项目-->定义好项目名称,选择语言,选择JDK版本-->接下来选择Spring Boot版本

已经想要引入的依赖即可.


2.在Spring官网创建(Spring Initializr)


3.在阿里云创建(Cloud Native App Initializer)

3.代码

首先我们写 一个简单的代码

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


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/requst")
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello Spring";
    }
}

输出:

4.学习使用Spring MVC

4.1流程

1.建立连接:代码和浏览器建立连接。

2.请求:用户使用浏览器发送请求,要在代码中获得这个请求。

3.响应:MVC这一套下来以后会有一个具体的响应,所以需要让这个响应返回给用户。

4.2建立连接

让浏览器和我们的后端代码建立连接需要用到@RequstMapping 和@RequstController.

这两个注解.

接下来我们先了解下这两个注解:

@RequstMapping

1.在Spring MVC中,控制器(Controller)类里的方法会用这个注解来指定处理的URL路径。

@RequestMapping("/hello")可能对应到某个处理请求的方法上。那这样的话,当用户访问/hello时,这个方法就会被调用.

2.这个注解还能指定HTTP方法,比如GET、POST等。也就是说,除了路径之外,还可以通过method属性来限制请求的类型。比如,@RequestMapping(value="/hello",

method=RequestMethod.GET)这样的话,只有GET请求才会被这个方法处理。

java 复制代码
    // 指定使用GET
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String sayHello() {
        return "hello, Spring MVC";
    }

3.这个注解可以应用在类级别和方法级别。如果类上有一个@RequestMapping("/api"),而方法上有@RequestMapping("/users"),那么完整的路径应该是/api/users。这样的话,可以避免在每个方法里重复写相同的路径前缀.

@RequstController

@RestController是Spring MVC中的一个注解,它结合了@Controller和@ResponseBody的功能。@RestController会将每个方法返回的对象自动转换为JSON或XML响应,省去了单独的@ResponseBody注解。同时,它还隐式地添加了@Controller的注解,因此不需要再手动添加就可以接收和处理 HTTP 请求。

5.传递参数

5.1传递单个参数

5.1.1String类型

java 复制代码
@RequestMapping("/r1")
    public String r1(String name){
        return "name="+name;
    }

5.1.2int类型

java 复制代码
@RequestMapping("/r2")
    public int r2(int age){
        return age;
    }

但是使用int会存在一个问题:

如果浏览器不传递参数,那么使用int就会报错,我们可以看到状态码为500,就是服务器内部错误.所以我们尽量使用引用类型.引用类型不传参数的话服务器会返回一个null

java 复制代码
 @RequestMapping("/r3")
    public String r3(Integer age){
        return "age="+age;
    }

5.3设置参数时,传递的参数要与方法中的参数一致.否则不会成功传值

5.4参数过多我们可以使用对象传入

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

public class Student {
    private String name;
    private Integer id;
    private Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", age=" + age +
                '}';
    }
}
java 复制代码
 @RequestMapping("/r4")
    public Student r4(Student student){
        return student;
    }

注:这里对象传入会有默认的初始化值,不传数据也会有,不会出现报错

5.5**@RequestParam()**

1.在传参中我们使用**@RequestParam()注解**,在URL中传参时只需要按照注解中的字符串传入即可.达到重命名效果

java 复制代码
@RequestMapping("/r5")
    public String r5(@RequestParam("UserName") String name){
        return "name="+name;
    }

2.**@RequestParam()**还有一个机制:

使用**@RequestParam()**在URL或者body中必须要设置参数,否则就会报错

但是我们可以在注解中用关闭这个.默认是必填选项,不填的话会报400错误,也可以设置可以不填的选项,将required设置为false即可,这也是为了在后端开发的时候避免几个参数类似不好判断

3.@RequestParam() 作用就是一个用于从 ​HTTP 请求的查询参数(URL 参数)或表单数据中提取值的注解。

下面这行代码就是将HTTP请求中的查询参数通过**@RequestParam()**注解提取出值保存在集合中

java 复制代码
@RequestMapping("/r4")
    public String r4(@RequestParam List<String> list){
        return "接受数组="+list;
    }

5.6@RequstBody

如果在body(正文)中传入数据可能不会返回正确的响应.

将客户端发送的 HTTP 请求体(Request Body) 内容自动转换为 Java 对象,支持 JSON、XML 等数据格式

java 复制代码
@RequestMapping("/r4")
    public Student r4(Student student){
        return student;
    }

如果我们要在body(正文)中传输数据就需要使用@RequstBody注解

java 复制代码
@RequestMapping("/r6")
    public Student r6(@RequestBody Student student){
        return student;
    }

此时我们再看下响应的结果

相关推荐
逸狼4 分钟前
【JavaEE进阶】Spring Boot 日志
java·spring boot·后端
spencer_tseng5 分钟前
apache-maven-3.2.1
java·maven·apache
计算机毕设定制辅导-无忧学长5 分钟前
Maven 生命周期与构建命令(二)
java·服务器·maven
m0_748252235 分钟前
maven导入spring框架
数据库·spring·maven
楠枬11 分钟前
在线抽奖系统——项目介绍
spring boot·mysql·spring
chen2017sheng25 分钟前
Spring Framework测试工具MockMvc介绍
java·后端·spring
中东大鹅40 分钟前
Tomcat 目录结构和应用实现
java·tomcat·firefox
鹿说-42 分钟前
Spring基础01
java·spring
Aphelios3801 小时前
Linux 权限系统和软件安装(二):深入理解 Linux 权限系统
java·linux·运维·服务器·tomcat
JIU_WW1 小时前
Netty内置的空闲检测机制
java·服务器·前端·websocket·netty