【JavaEE】Spring Web MVC入门:掌握Spring的MVC框架基础


Spring Web MVC

什么是Spring Web MVC

官⽅对于 Spring MVC 的描述是这样的:

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC".

什么是Servlet呢?

Servlet 是⼀种实现动态⻚⾯的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范,或者说是⼀套Java Web 开发的技术标准. 只有规范并不能做任何事情,必须要有⼈去实现它. 所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、⽅法、属性等.

Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,⽬前常⻅的实现了Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为"Servlet 容器". Servlet 容器⽤来管理程序员编写的 Servlet 类。

从上述定义我们可以得出⼀个信息: Spring Web MVC 是⼀个 Web 框架.

下⾯咱们简称之为: Spring MVC

然⽽要真正的理解什么是 Spring MVC?我们⾸先要搞清楚什么是 MVC?

MVC 定义

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分

在这里插入图片描述

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

⽐如去饭店吃饭

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

在这个过程中

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

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

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

⽐如去公司⾯试

我们到了公司之后, HR会给我们安排会议室, 根据候选⼈去通知不同的部⻔来安排⾯试, ⾯试结束后, 由HR来告诉⾯试结果

在这个过程中

HR就是View(视图), 负责接待候选⼈, 并告知候选⼈⾯试结果

不同的部⻔, 就是Controller(控制器), HR根据候选⼈来选择对应的部⻔来进⾏⾯试

⾯试官, 就是Model层, 来处理⾯试这个事情.

什么是Spring MVC

MVC 是⼀种架构设计模式, 也⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现. 除此之外, Spring MVC还是⼀个Web框架.

总结来说,Spring MVC 是⼀个实现了 MVC 模式的 Web 框架.

所以, Spring MVC主要关注有两个点:

  1. MVC
  2. Web框架

Spring MVC 全称是 Spring Web MVC

其实, Spring MVC 我们在前⾯已经⽤过了, 在创建 Spring Boot 项⽬时,我们勾选的 Spring Web 框架,其实就是 Spring MVC 框架:

在这里插入图片描述

这个就是Spring MVC的依赖

Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.

这个是Spring Web下面那段话

前⾯创建的不是SpringBoot项⽬吗? 怎么⼜变成了Spring MVC项⽬? 他们之间到底有着什么样的关系?

SpringBoot是2014年发布的, Spring 是2004年发布的, 在2014年发布之前, 就不能⽤Spring实现MVC架构吗? 显然不是了.

Spring Boot 只是实现Spring MVC的其中⼀种⽅式⽽已.

Spring Boot 是创建 Spring MVC 的一种方式

Spring Boot 可以添加很多依赖, 借助这些依赖实现不同的功能. Spring Boot 通过添加Spring Web MVC框架, 来实现web功能

⽐如: 厨房可以⽤来做饭, 但真实实现做饭功能的是⽕以及各种做饭相关的⻝材和⼯具.

厨房就好⽐是SpringBoot, 厨房可以装柜⼦, 实现收纳功能, 装燃⽓灶等, 实现做饭功能.

做饭这个事, 就是MVC, 在⼏千年前, 有⽕有⻝材就可以实现做饭.

不过Spring在实现MVC时, 也结合⾃⾝项⽬的特点, 做了⼀些改变, 相对⽽⾔, 下⾯这个图或许更加合适⼀些

不过核⼼没变

⽐如上⾯的例⼦中, 去饭店吃饭. ⼀些饭店是前厅来负责接待客⼾, 帮助客⼾点餐, 也就是Controller来负责接收⽤⼾的请求.

去公司⾯试, 直接由⾯试官来接待候选⼈, 省去了HR中间的交接过程.

当前MVC的概念又发生了一些变化,后端开发人员不涉及前端页面的开发,所以没有View层

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

学习Spring MVC

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应.

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

主要分以下三个⽅⾯:

  1. 建⽴连接(客户端和服务器):将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。

  2. 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能.

  3. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾, 也就是响应.

⽐如⽤⼾去银⾏存款

  1. 建⽴连接: 去柜台
  2. 请求: 带着银⾏卡, ⾝份证去存款
  3. 响应: 银⾏返回⼀张存折.

对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC.

1. 项目准备

Spring MVC 项⽬创建和 Spring Boot 创建项⽬相同,在创建的时候选择 Spring Web 就相当于创建了Spring MVC 的项⽬.

Spring MVC 使⽤ Spring Boot 的⽅式创建

创建项⽬时, 勾选上 Spring Web 模块即可,如下图所⽰:

在这里插入图片描述

2. 建立连接

在 Spring MVC 中使⽤ @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤

@RequestMapping 是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的.

表⽰服务收到请求时, 路径为 /sayhi 的请求就会调⽤ sayhi 这个⽅法的代码.

@RequestMapping 可以修饰方法也可以修饰类

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

如果没有类的路径就直接方法路径

@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息

@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息

我们先来看看代码怎么写

@RestController
public class HelloWorld {
    @RequestMapping("/sayhi")
    public String sayHi(){
        return "hi,world";
    }
    @RequestMapping("/sayhello")
    public String sayHello(){
        return "hello,world";
    }
}

这种没有类的路径就是这样的了http://127.0.0.1:8080/sayhi

@RequestMapping("/say")
@RestController
public class HelloWorld {
    @RequestMapping("/sayhi")
    public String sayHi(){
        return "hi,world";
    }
    @RequestMapping("/sayhello")
    public String sayHello(){
        return "hello,world";
    }
}

这种有类的路径就是这样的了http://127.0.0.1:8080/say/sayhello

这些路径也可以写多层,最终访问时, 依然是 类路径 + ⽅法路径

比如

@RequestMapping("/say/say/say")

注意:

@RequestMapping("/say/say/say")

最开头的/是可以省略的,但企业开发建议写上,最好是一直写上

@RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果前⾯没有加/ , Spring会拼接上⼀个 /

开发中建议加上类路径:

  1. 避免重复
  2. 方便查找代码

@RequestMapping 不仅支持GET也支持POST也还支持PUTDELETE等等都支持

除非你这么写,通过method属性限制,才是仅支持GET

这里相当于这个注解GetMapping

@RequestMapping(value="/sayhi",method = RequestMethod.GET)
public String sayHi(){
    return "hi,world";
}
@GetMapping("/saybye")
public String sayBye(){
    return "bye,world";
}

注意:这里如果写了method前面就一定要写value,不然就报错了

@RestController的作用是什么?

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

Spring会对所有的类进⾏扫描, 如果类加了注解@RestController, Spring才会去看这个类⾥⾯的⽅法有没有加 @RequestMapping 这个注解, 当然他的作⽤不⽌这⼀点, 咱们先⽤, 后⾯再详细讲。

如果不用,当你输入http://127.0.0.1:8080/sayhi的时候,程序就会报404,找不到该页面

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值