Spring Web MVC入门(1)

什么是Spring Web MVC?

定义:Spring Web MVC是基于Servlet构建的原始Web框架,从一开始就包含在Spring框架中.它的正式名称"Spring Web MVC"来自其源模块的名称(Spring-webmvc),但是它通常被称为"Spring MVC".

什么是Servlet?

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

从定义中可以得到一个关键信息: Spring Web MVC是一个Web框架. 之后我们简称为:Spring MVC

然而想真正搞清楚什么是Spring MVC, 我们首先要搞懂MVC是什么.

MVC定义

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

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

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

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

比如去饭店吃饭

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

在这个过程中

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

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

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

 什么是Spring MVC

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

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

所以Spring MVC主要的关注有两个点: 1.MVC; 2.Web框架.

Spring boot和Spring MVC之间的关系:

Spring Boot是实现Spring MVC的一种方式.

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

比如:厨房可以用来做饭,但真实实现做饭功能的是火及各种做饭的相关食材和工具.

厨房就好比Spring Boot,厨房可以装柜子,实现收纳功能,装燃气灶等,实现做饭功能.

做饭这个事,就是MVC,在几千年前,有火有食材就可以做饭. 

不过Spring在实现MVC时,也结合自身项目的特点,做了一点改变,相对而言,使用这个图更合适:
 

不过核心没有变

比如上面的例子中,去饭店吃饭.一些饭店是前厅负责接待客户,帮助客户点餐,也就是Controller来负责接收用户的请求. 

学习Spring MVC

既然是Web框架,那么当在浏览器中输入url之后,我们的Spring MVC就可以感知到用户的请求,并给予响应.(我们学习Spring MVC,重点也就是学习如何通过浏览器和用户程序进行交互).

主要分以下几个方面:

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

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

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

比如用户去银行存款

1.建立连接:去柜台

2.请求:带着银行卡,身份证去存款.

3.响应:银行返回一张存折. 

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

建立连接

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

创建一个UserController类,实现用户通过浏览器和程序的交互,具体实现的代码如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {//路由器规则注册@RequestMapping("/sayHi")public String sayHi() {return "hello, Spring MVC";}
}

方法名和路径名称无需一致.

接下来访问:http://127.0.0.1:8080/sayHi,就可以看到程序返回的程序了.

 

@RequestMapping注解介绍

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

表示服务收到请求时,路径为/sayHi的请求就会调用sayHi这个方法的代码.

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

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

我们把@RestController去掉,再来访问一次:

可以看到,程序报了404,找不到页面.

这就是@RestController起到的作用

一个项目中,会有很多类,每个类可能有很多的方法,Spring程序怎么知道要执行哪个方法呢?

Spring会对所有的类进行扫描,如果类加了注解@RestController, Spring才会去看这个类里面的方法有没有加@RequestMapping这个注解,当然它的作用不止这一点,咱们先用.

@RequestMapping使用

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

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

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

@RequestMapping("/user")
@RequestController
public class UserController {@RequestMapping("/sayHi")public String sayHi() {return "Hello, Spring MVC";}
}

访问地址:http://127.0.0.1:8080/user/sayHI

注意:@RequestMapping的URL路径最前面加不加 / (斜杠)都可以,Spring程序启动时,会进行判断,如果前面没有加 / , Spring就会加上一个 / .

访问之后仍然是可以正常响应的. (通常情况下,我们都会加上 / 

@RequestMapping的路径也可以是多层路径,最终访问时,依然是类路径 + 方法路径.

​
@RequestMapping("/user/m1")
@RequestController
public class UserController {@RequestMapping("/say/hi")public String sayHi() {return "Hello, Spring MVC";}
}​

访问路径:http://127.0.0.1:8080/user/m1/say/hi

 @RequestMapping是GET还是POST请求?

我们来测试一下就可以得到结论了.

GET请求:

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

POST请求:

我们通过form表单来构造请求.

创建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>
</html>

访问方式为http://127.0.0.1:8080/test.html

从运行结果可以看出:@RequestMapping既支持Get请求,又支持Post请求.同理,也支持其它的请求方式. 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/540172.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源推荐榜【一个AI模型可以把设计直接生成衣服穿到模特身上】

OOTDiffusion 开源地址&#xff1a;https://github.com/levihsu/OOTDiffusion

机器学习--Transformer 1

Transformer 是一个基于自注意力的序列到序列模型&#xff0c;与基于循环神经网络的序列到序列模型不同&#xff0c;其可以能够并行计算。 一、序列到序列模型 序列到序列模型输入和输出都是一个序列&#xff0c;输入与输出序列长度之间的关系有两种情况。第一种情况下&#…

专业140+总400+重庆邮电大学801信号与系统考研经验重邮电子信息与通信工程,真题,大纲,参考书。

今年报考重庆邮电大学研究生&#xff0c;初试专业课801信号与系统140总分400&#xff0c;总结一下自己去年的复习经验&#xff0c;希望对大家复习有帮助。 专业课&#xff1a; 重邮专业801信号与系统难度中等&#xff0c;今年140算是正常发挥&#xff0c;没有达到Jenny老师要求…

【诚信3·15】广州流辰信息|诚信至上,始终如一!

每一个承诺&#xff0c;广州流辰信息皆倾心对待&#xff1b;每一份期待&#xff0c;广州流辰信息亦用心守护。近十年用专业缔造好品质&#xff0c;用服务追求好口碑。在为客户服务的路上&#xff0c;流辰信息始终无惧考验&#xff0c;保持初心。在3.15国际消费者权益日&#xf…

绝地求生投掷物小知识

hi&#xff0c;我是闲游盒&#xff01;本期给大家带来的是详细投掷物的小技巧,投掷物道具主要有手雷、闪光弹、烟雾弹、燃烧瓶&#xff0c;C4和汽油桶为特殊不详细说明。 手雷 破片手雷是一种很占背包的投掷物&#xff0c;但能够造成大范围的伤害&#xff0c;如果没记错的话&a…

【探索Linux】—— 强大的命令行工具 P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)

阅读导航 引言一、UDP协议1. UDP简介2. UDP的特点3. UDP的使用场景4. UDP的局限性 二、TCP协议1. TCP简介2. TCP的特点3. TCP的应用场景 三、UDP 和 TCP 的异同温馨提示 引言 在上一篇文章中&#xff0c;我们深入探讨了Linux网络编程的基石——套接字&#xff08;Socket&#…

蓝桥杯深度优先搜索|剪枝|N皇后问题|路径之谜(C++)

搜索&#xff1a;暴力法算法思想的具体实现 搜索&#xff1a;通用的方法&#xff0c;一个问题如果比较难&#xff0c;那么先尝试一下搜索&#xff0c;或许能启发出更好的算法 技巧&#xff1a;竞赛时遇到不会的难题&#xff0c;用搜索提交一下&#xff0c;说不定部分判题数据很…

基于java+springboot+vue实现的高校社团管理系统(文末源码+Lw+ppt)23-419

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对高校社团的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”…

pycharm中连接远程服务器

文章目录 概要文件进行映射将本地的project和远程的project进行映射&#xff0c;一定要使用sftp本地文件和远程的位置配置不想将远程的文件同步时候&#xff0c;可以进行下面设置 配置远程服务器的python解释器需要setting-->python interpreter-->add---> on ssh选择…

2024年AI辅助研发:技术革新引领研发新纪元

文章目录 &#x1f4d1;前言一、AI辅助研发的技术进展二、行业应用案例三、面临的挑战与机遇四、未来趋势预测全篇总结 &#x1f4d1;前言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐成为推动社会进步的重要力量。特别是在研发领域&#xff0c;A…

数据赋能:构建数据治理与AI的协同闭环_光点科技

在数字化浪潮中&#xff0c;数据已成为企业的新型燃料&#xff0c;而AI则是提炼这种燃料的精炼厂。数据治理与AI的协同作用&#xff0c;正在引领企业迈向更智能、更高效的未来。本文将展示企业如何通过将数据治理与AI技术相结合&#xff0c;实现数据价值的最大化并推动企业的持…

2月大家电线上市场分析:综合电商(京东淘宝天猫)排行榜出炉

今年2月&#xff0c;大家电在传统电商平台的表现不敌去年。 根据鲸参谋数据显示&#xff0c;2月大家电综合电商&#xff08;京东天猫淘宝&#xff09;累计销量约440万件&#xff0c;同比去年下滑33%&#xff1b;销售额约96亿元&#xff0c;同比去年下滑27%。其中&#xff0c;京…