当前位置: 首页 > news >正文

Spring MVC 1

什么是Spring Web MVC

官方对Spring MVC的描述是这样的:Spring Web MVC 是基于Severlet 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 。

那么什么是MVC呢?

MVC定义

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

View(视图):指在应用程序中专门用来和浏览器进行交互,展示数据的资源。

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

Controller(控制器):可以理解为分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后要跳转回哪一个视图。即用来连接视图和模型。

比如我们去面试

我们进到公司之后,会先有一个HR接待我们,然后HR会带我们去找这个公司对应岗位的负责人,负责人会带我们去对接和我们面试的面试官。

在这个过程中,HR就是View(视图),负责接待我们;负责人就是Controller(控制器),根据我们的情况来去对接面试官;面试官就是Model(模型),根据负责人的要求来完成面试。

什么是Spring MVC?

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

总的来说,Spring MVC是一个实现了MVC模式的Web框架。所以,Spring MVC是一个实现了MVC模式的Web框架,所以,Spring MVC主要关注有两个点:1、MVC   2、Web框架。

其实,我们早在上一篇文章就已经使用过Spring MVC了,在创建Spring Boot项目是,我们勾选的Spring Web框架其实就是Spring MVC框架:

这时候,有的同学就有疑问了,前面创建的不是Spring Boot 项目吗?怎么又变成Spring MVC项目了?他们之间到底有着什么样的关系呢?

Spring Boot 只是实现Spring MVC的其中一种方式而已。Spring Boot可以添加很多的依赖,借助这些依赖实现不同的功能,Spring Boot 通过添加Spring Web MVC框架,来实现web功能。

打个比方:

Spring是火车的话,那么Spring MVC就是卖火车票这个任务,Spring Boot是123

06,Spring MVC和Spring Boot都不能脱离Spring单独存在,换句话说它们都依赖于Spring。(卖火车票这件事和12306这个程序都不能离开火车),而Spring Boot是实现Spring MVC的一种方式(卖火车票能通过12306售卖,也可以通过售票处售卖)。

不过Spring在实现MVC时,也结合自身特点,做了一些改变,相对而言,下面这个图或许更加合适一些。 

学习Spring MVC

既然是Web框架,那么当用户在浏览器中输入了url之后,我们的Spring MVC项目就可以感知到用户的请求,并给与响应。

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

主要分以下三个方面:

1、建立连接:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序。

2、请求:用户请求时会带一些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能。

3、响应:执行了业务逻辑之后,要把程序执行的结果放回给用户,也就是响应。

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

项目准备

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

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

 建立连接

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

先在工作目录中,写一个RequestController类:

再添加上如下代码和注解: 

@RestController
public class RequestController {@RequestMapping("/hello")public String sayHello(){return "hello spring mvc";}
}

启动之后,访问:127.0.0.1:8080/hello ,就可以看到程序返回的数据了。

@RequestMapping注解介绍

@RequestMapping是Spring Web MVC应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。表示服务收到请求时,路径为/hello的请求就会调用sayHello这个方法的代码。

路由映射:当一个用户访问URL时,将用户的请求对应到程序某个类的某个方法的过程就叫做路由映射。

既然@RequestMapping已经可以达到我们的目的了,我们为什么还要加@RestController呢?

我们可以试着把@RestController去掉,重新启动服务器后,再访问一次。

可以看到,程序报了404(Not Found),找不到该页面,这就是@RestController起到的作用。

一个项目中,会有很多的类,每个类可能会有很多的方法,Spring怎么知道要去执行哪个方法呢?Spring会对所有的类进行扫描,如果类加了注解@RestController,Spring才会去看这个类里面的方法有没有加@RequestMapping这个注解。当然它的作用不止这一点,我们先用,后面再详细讲解。

@RequestMapping使用

@RequestMapping既可以修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类路径+方法路径。

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

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

在原有代码的基础上,使用@RequestMapping修饰类。

@RequestMapping("/request")
@RestController
public class RequestController {@RequestMapping("/hello")public String sayHello(){return "hello spring mvc";}
}

刷新服务器,并访问:127.0.0.1:8080/request/hello 

@RequestMapping是GET还是POST请求

GET请求 :

浏览器发送的请求类型都是get,通过以上案例,可以看出@RequestMapping支持get请求。

我们也可以通过Fiddler抓包进行查看:

也可以得到:@RequestMapping支持get请求。

Post请求:

我们通过form表单来构造请求:在stactic目录下创建test.html。

html代码如下: 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/request/hello" method="post"><input type="submit" value="提交">
</form>
</body>
</htm

 刷新之后,访问:标题。

点击提交的同时,使用Fiddler进行抓包。可以看到@RequestMapping是支持Post请求的。

http://www.dtcms.com/a/272322.html

相关文章:

  • C++中的list的学习
  • Go语言教程-变量、常量、命名规则
  • 亚矩阵云手机破解Maio广告平台多账号风控:从“生存焦虑”到“规模化增长”的终极方案
  • 电路研究9.4——合宙Air780EP的LuatOS、CSDK跟标准AT
  • 基于开源AI大模型AI智能名片S2B2C商城小程序源码的私域流量新生态构建
  • 独立服务器选择Rocky Linux还是CentOS
  • 【数据结构】顺序表(sequential list)
  • 学习中断配置的一天(第五天)
  • 安装nginx+php环境
  • OpenCV探索之旅:多尺度视觉与形状的灵魂--图像金字塔与轮廓分析
  • 无人机识别比赛记录与分析
  • Java---IDEA
  • 【论文阅读】Decoupled Knowledge Distillation
  • 【大模型推理论文阅读】 Thinking Tokens are Information Peaks in LLM Reasoning
  • iOS 抓包详细教程:从零搭建、操作到实战调试的全流程指南
  • 图像亮度调整的简单实现
  • Flutter多线程机制深度解析
  • 【Docker基础】Docker容器与网络关联命令使用指南:深入理解容器网络连接
  • 力扣61.旋转链表
  • Windows下VScode配置FFmpeg开发环境保姆级教程
  • 面试150 LRU缓存
  • LeetCode - 1668. 最大重复子字符串
  • 原创:多面体编译,polybench-c-4.2批量测试脚本
  • php中array($this, ‘loadClass‘)表示啥意思?
  • 阿里云-跨账号同步OSS Bucket
  • 【Note】Linux Kernel 之 内核架构、源码文件、API/ABI 、FHS
  • Linux 内核日志中常见错误
  • idea安装maven 拉取依赖失败的解决办法
  • 网络基本概念
  • Ubuntu22.0.4安装PaddleNLP