Spring Web MVC

Spring Web MVC入门

  • [1. 什么是 Spring Web MVC?](#1. 什么是 Spring Web MVC?)
    • [1.1 MVC定义](#1.1 MVC定义)
    • [1.2 什么是 Spring MVC?](#1.2 什么是 Spring MVC?)
  • [2. 学习Spring MVC](#2. 学习Spring MVC)
    • [2.1 项目准备](#2.1 项目准备)
    • [2.2 建立连接](#2.2 建立连接)
      • [2.2.1 @RequestMapping 注解介绍](#2.2.1 @RequestMapping 注解介绍)
      • [2.2.2 @RequestMapping 使用](#2.2.2 @RequestMapping 使用)
      • [2.2.3 @RequestMapping 是GET还是POST请求?](#2.2.3 @RequestMapping 是GET还是POST请求?)
    • [2.3 Postman介绍](#2.3 Postman介绍)
      • [2.3.1 下载安装 Postman](#2.3.1 下载安装 Postman)
      • [2.3.2 创建请求](#2.3.2 创建请求)
      • [2.3.3 传参介绍](#2.3.3 传参介绍)

1. 什么是 Spring Web MVC?

官⽅对于SpringMVC的描述是这样的:

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, "Spring Web MVC", comes from the name of its source module (spring-webmvc)

引⽤来⾃:https://docs.spring.io/spring-framework/reference/web/webmvc.html

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

什么是Servlet呢?

Servlet是⼀种实现动态⻚⾯的技术.准确来讲Servlet是⼀套JavaWeb开发的.规范,或者说是⼀套 JavaWeb开发的技术标准.只有规范并不能做任何事情,必须要有⼈去实现它.所谓实现Servlet规 范,就是真正编写代码去实现Servlet规范提到的各种功能,包括类、⽅法、属性等. Servlet规范是开放的,除了Sun公司,其它公司也可以实现Servlet规范,⽬前常⻅的实现了 Servlet规范的产品包括Tomcat、Weblogic、Jetty、Jboss、WebSphere等,它们都被称 为 "Serlet容器". Serlet容器用来管理程序员编写的Serlet类.

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

下⾯咱们简称之为:SpringMVC

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

1.1 MVC定义

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

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

⽐如去饭店吃饭

客⼾进店之后,服务员来接待客⼾点餐,客⼾点完餐之后,把客⼾菜单交给前厅,前厅根据客⼾菜单

给后厨下达命令.后厨负责做饭,做完之后,再根据菜单告诉服务员,这是X号餐桌客⼈的饭.

在这个过程中

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

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

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

⽐如去公司⾯试

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

在这个过程中

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

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

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

1.2 什么是 Spring MVC?

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

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

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

  1. MVC

  2. Web框架

    SpringMVC全称是SpringWebMVC

其实,SpringMVC我们在前⾯已经⽤过了,在创建SpringBoot项⽬时,我们勾选的SpringWeb框架 其实就是SpringMVC框架:

可以看到,SpringWeb的介绍是: Buildweb,includingRESTful,applicationsusingSpringMVC.UsesApacheTomcatasthedefault embeddedcontainer.

这时候可能有些同学就懵了,前⾯创建的不是SpringBoot项⽬吗?怎么⼜变成了SpringMVC项⽬?他们 之间到底有着什么样的关系?

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

SpringBoot只是实现SpringMVC的其中⼀种⽅式⽽已.

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

⽐如:厨房可以⽤来做饭,但真实实现做饭功能的是⽕以及各种做饭相关的⻝材和⼯具. 厨房就好⽐是SpringBoot,厨房可以装柜⼦,实现收纳功能,装燃⽓灶等,实现做饭功能. 做饭这个事,就是MVC,在⼏千年前,有⽕有⻝材就可以实现做饭.

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

不过核⼼没变

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

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

2. 学习Spring MVC

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

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

主要分以下三个⽅⾯:

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

⽐如⽤⼾去银⾏存款

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

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

2.1 项目准备

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

SpringMVC使⽤SpringBoot的⽅式创建

SpringMVC更早期的实现⽅式,课程中不再讲解.

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

2.2 建立连接

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

我们先来看看代码怎么写

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

java 复制代码
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody;

	@RestController 
	public class UserController { 
		// 路由器规则注册  
		@RequestMapping("/sayHi") 
		public String sayHi(){ 
		return "hello,Spring MVC"; 
		} 
	}

⽅法名和路径名称⽆需⼀致

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

2.2.1 @RequestMapping 注解介绍

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

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

**路由映射:**当⽤⼾访问⼀个URL时,将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.

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

@RestController 去掉,再来访问⼀次:

可以看到,程序报了404,找不到该⻚⾯.

这就是 @RestController 起到的作⽤.

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

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

2.2.2 @RequestMapping 使用

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

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

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

java 复制代码
@RequestMapping("/user")

@RestController 

public class UserController { 

	@RequestMapping("/sayHi") 
	public String sayHi(){ 
	
		return "hello,Spring MVC"; 
	}

}

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


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

java 复制代码
@RequestMapping("user") 
@RestController 

public class UserController { 
	@RequestMapping("sayHi") 
	public String sayHi(){ 
		return "hello,Spring MVC";
	
	 }
}

访问http://127.0.0.1:8080/user/sayHi,依然可以正确响应. 通

常情况下,我们加上/

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

java 复制代码
@RequestMapping("/user/m1")
@RestController
public class UserController {
    @RequestMapping("/say/hi")
    public String sayHi(){
        return "hello,Spring MVC";
    }
}

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

2.2.3 @RequestMapping 是GET还是POST请求?

我们来测试⼀下就知道结论了

GET请求:

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

POST请求:

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

创建test.html,html代码:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
 <form action="/user/sayHi" method="post">
 <input type="submit" value="提交">
 </form>
</body>
</html>

前端代码放在static⽬录下,访问⽅式为:http://127.0.0.1:8080/test.html

如果有多层⽬录,访问链接从static⽬录开始写

如上图,访问链接为:http://127.0.0.1:8080/html/test.html

从运⾏结果可以看出:@RequestMapping 既⽀持Get请求,⼜⽀持Post请求.同理,也⽀持其他的请 求⽅式.

那如何指定GET或者POST类型呢?

指定GET/POST⽅法类型

我们可以显⽰的指定@RequestMapping来接收POST的情况,如下所⽰:

java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@RestController
public class UserController {
    @RequestMapping(value = "/getRequest",method= RequestMethod.POST)
    public String sayHi(){
    return "get request...";
    }
}

2.3 Postman介绍

从上⾯的案例中,也发现了⼀个新的问题,就是我们测试后端⽅法时,还需要去写前端代码.这对我们来 说,是⼀件⿇烦⼜痛苦的事情.

随着互联⽹的发展,也随着项⽬难度的增加,企业也按照开发的功能,把⼈员拆分成了不同的团队.界⾯ 显⽰交给"前端开发⼯程师",业务逻辑的实现交给"后端开发⼯程师".

后端开发⼯程师,不要求也不需要掌握前端技能了.

那后端开发⼯程师,如何测试⾃⼰的程序呢?--使⽤专业的接⼝测试⼯具

咱们课堂中使⽤的是Postman,接下来我们来学习Postman的使⽤.

2.3.1 下载安装 Postman

下载链接:https://www.postman.com/downloads/

也可以使⽤课件中提供的app来安装: Postman-win64-Setup.exe

安装后会提⽰有版本升级,点击Dismiss即可(⽆需升级)

2.3.2 创建请求

界面介绍

2.3.3 传参介绍

  1. 普通传参,也就是通过查询字符串来传参

学习HTTP环节时,我们通过URL来访问互联⽹上的某⼀个资源

URL的格式如下:

其中,查询字符串就是请求的参数

  1. form-data(完整表⽰为:multipart/form-data)

    表单提交的数据,在form标签中加上enctyped="multipart/form-data" ,通常⽤于提交图 ⽚/⽂件.对应 Content-Type: multipart/form-data

  2. x-www-form-urlencoded form表单,对应 Content-Type: application/x-www-from-urlencoded

  3. raw

    可以上传任意格式的⽂本,可以上传text、json、xml、html等

相关推荐
Miraitowa_cheems1 小时前
[JavaEE] Spring IoC&DI
java·spring·java-ee
lichong9511 小时前
【Flutter&Dart】 listView.builder例子二(14 /100)
android·javascript·flutter·api·postman·postapi·foxapi
落日弥漫的橘_2 小时前
npm run 运行项目报错:Cannot resolve the ‘pnmp‘ package manager
前端·vue.js·npm·node.js
梦里小白龙2 小时前
npm发布流程说明
前端·npm·node.js
No Silver Bullet2 小时前
Vue进阶(贰幺贰)npm run build多环境编译
前端·vue.js·npm
破浪前行·吴2 小时前
【初体验】【学习】Web Component
前端·javascript·css·学习·html
!!!5252 小时前
SpringBoot-web入门程序剖析
java·spring boot·后端
泷羽Sec-pp3 小时前
基于Centos 7系统的安全加固方案
java·服务器·前端
MiniFlyZt3 小时前
省市区三级联动(后端)
数据库·spring boot
IT 古月方源3 小时前
GRE技术的详细解释
运维·前端·网络·tcp/ip·华为·智能路由器