Spring Web MVC入门

看完这篇博客你能学到什么

  1. 理解什么是Spring Web MVC
  2. 如何学习Spring MVC
  3. 了解常见的Spring Web MVC注解

正文

什么是Spring Web MVC 呢?
  • 从标题我们就能看见一个很陌生的名词"Spring Web MVC ",这个名词听着很高大上,但它到底是啥呢?这是官方文档的解释:
    Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称"Spring Web MVC"来⾃其源模块的名称(Spring-webmvc),但它通常被称为 SpringMVC
  • 看不懂没关系,说人话就是:Spring Web MVC 是⼀个 Web 框架
    然而想要真正理解Spring MVC 需要我们了解什么是MVC,其实MVC就是一种思想,MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分,如下图所示

    可以向了解一下这几个部分的定义:
    • View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
    • Model(模型) 是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
    • Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型

主要的过程也就是:View 向 Contoller 发了一个请求,此时在Contoller内部进行选择,看哪一个解决方案(解决模型)能解决这个请求,选完以后就向Model发送指令,选择处理该问题的模型,等处理完以后,Model 就将处理结果先返回给Controller ,然后由Controller将结果返回给View视图。这就是MVC的主要框架,也是一种解决问题的思想。

⽐如去饭店吃饭

客⼾进店之后, 服务员来接待客⼾点餐, 客⼾点完餐之后, 把客⼾菜单交给前厅, 前厅根据客⼾菜单给后厨下达命令. 后厨负责做饭, 做完之后, 再根据菜单告诉服务员, 这是X号餐桌客⼈的饭.

在这个过程中

服务员就是View(视图), 负责接待客⼾, 帮助客⼾点餐, 以及给顾客端饭

前厅就是Controller(控制器), 根据⽤⼾的点餐情况, 来选择给哪个后厨下达命令.

后厨就是Model(模型), 根据前厅的要求来完成客⼾的⽤餐需求

  • 综上所述:MVC 是⼀种架构设计模式, 也⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现. 除此之外, Spring MVC还是⼀个Web框架.
    总结来说,Spring MVC 是⼀个实现了 MVC 模式的 Web 框架
    由于SpringBoot 是 SpringMVC 的一种具体实现,所以我们创建的项目一般都是SpringBoot。这也解答了为啥有同学创建的项目是SpringBoot。Spring Boot 可以添加很多依赖, 借助这些依赖实现不同的功能. Spring Boot 通过添加Spring WebMVC框架, 来实现web功能.
  • ⽐如: 厨房可以⽤来做饭, 但真实实现做饭功能的是⽕以及各种做饭相关的⻝材和⼯具.厨房就好⽐是SpringBoot, 厨房可以装柜⼦, 实现收纳功能, 装燃⽓灶等, 实现做饭功能.做饭这个事, 就是MVC, 在⼏千年前, 有⽕有⻝材就可以实现做饭.不过Spring在实现MVC时, 也结合⾃⾝项⽬的特点, 做了⼀些改变。
  • 依据上面点餐的例子,主要的改变也就是,我们可以直接进入饭店直接到前台点餐,而不用间接叫服务员过来再点菜。
如何学习Spring MVC呢?

在简单理解了什么是Spring MVC之后,我们就能初步了解到底该怎样学习Spring MVC了。

咱们学习Spring MVC, 重点也就是学习如何通过浏览器和用户程序进⾏交互.

主要分以下三个⽅⾯:

  1. 建⽴连接:将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
  2. 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能.
  3. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给用户, 也就是响应.
常见的Spring Web MVC 注解

我们先学习的是连接:而Spring MVC 注解就是连接里面的重要部分。所以,我的这个博客框架顺序是紧密联系的,大主题能区分它们的主要内容,但是主体之间还紧密联系,哎哎哎,有那么一瞬间感觉自己真的好nb啊,好了我们进入正题,不开玩笑了。

  • 1,在 Spring MVC 中使⽤ @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤,我们先来看看代码怎么写

    我们运行之后在浏览器上输入网址 http://127.0.0.1:8080/hello
    就能看到效果了。至于为啥这个网址可以,现在可以不做了解,不过以后随着学习的深入,肯定会了解的。
    效果如
  • 注意:我们可以看到我是在src/main/java/com.example.j20240711目录下创建的文件。一个习惯就是我们在 src 里面写正常的业务代码,在text里面写测试代码。因为我用的是 IDEA2022.3.3 的专业版所以有些页面可能会和你的不一样,不过大致框架都是一样的。其实,我们也能用标准版来写Spring,但要安装插件,比较麻烦。我图省事就选择专业版了,如果你也想用专业版,可以上CSDN搜教程,实在搞不定,可以去某宝低价买一个,很便宜,这样也能用专业版。
    @RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的.表⽰服务收到请求时, 路径为 /sayHi 的请求就会调⽤ sayHi 这个⽅法的代码.
    路由映射: 当⽤⼾访问⼀个 URL(可以理解成一个网址)时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.
    细心的同学会发现上面的注解除了 @RequestMapping ,还有@RestController那这个注解有什么用呢?我们可以先将他去掉试试。

可以看到出现了404,找不到该页面。

这就是 @RestController 起到的作⽤.

⼀个项⽬中, 会有很多类, 每个类可能有很多的⽅法, Spring程序怎么知道要执⾏哪个⽅法呢?

Spring会对所有的类进⾏扫描, 如果类加了注解@RestController, Spring才会去看这个类⾥⾯的⽅法

有没有加 @RequestMapping 这个注解, 当然他的作⽤不⽌这⼀点, 咱们先⽤, 后⾯再详细讲

  • @RequestMapping的作用
    @RequestMapping 既可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅法路径.
    @RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
    @RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息
java 复制代码
package com.example.j20240711;
//这两个包都是你人为加入注解自动导入的,不用过于关注
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RequestMapping("auto")//这是类路径
@RestController
public class TextApplication {
    @RequestMapping("hello")//这是方法路径
    //这里的方法名不一定非得是hello,可以换成其他的。
    public String hello(){
        return "hello";
    }
}
//因此我们访问的时候,使用的网址应该是:http://127.0.0.1:8080/auto/hello
  • 注意:
    @RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果前⾯没有加 / , Spring会拼接上⼀个 /
    通常情况下, 我们加上 / @RequestMapping 的URL路径也可以是多层路径, 最终访问时, 依然是 类路径 + ⽅法路径,如:

    上面主要介绍了两个注解,其实@RequestMapping 还没有讲解完,下部分的注解篇,我会单独写再写一篇博客。
    在这里我先提一个问题:假如我们想知道这个注解是支持get还是支持post呢?
    我们此时就需要写一些前端代码来发送数据,验证它到底是支持get,还是post,但是对于一个纯后端的人来说,我们是不懂前端代码到底怎么写的,此时Postman这个软件的作用就体现出来了,接下来的一期就是会讲到他的用法。
    下期预告:讲解 Postman的主要用法,以及学习Spring MVC的第二个重点:请求。
相关推荐
程序员iteng30 分钟前
需求开发全流程
java·git·spring
wrx繁星点点1 小时前
线程相关个人笔记总结
java·前端·jvm·spring boot·算法·spring·maven
yicj2 小时前
注解Spring @AliasFor使用笔记
java·spring
一只懒鱼a4 小时前
SpringBoot之外部化配置
java·spring boot·后端·spring
猿究院-张睿泽4 小时前
Spring的基本概念和结构
java·开发语言·后端·mysql·spring
java奋斗者6 小时前
如何测试Spring Data JPA的Repository?
spring
five-five6 小时前
Spring中DispatcherServlet、WebApplicationContext和ServletContext的关系
java·后端·spring
洛*璃7 小时前
Spring Cloud微服务项目集成MyBatis
后端·spring·spring cloud·微服务·mybatis·mybatis-plus
flying jiang18 小时前
Spring: try-catch 是否还会回滚
java·后端·spring
记得开心一点嘛19 小时前
使用SpringBoot+Vue3开发项目(2)---- 设计文章分类的相关接口及页面
前端·vue.js·spring boot·后端·spring·axios