Spring MVC
既然是Web框架,那么当⽤⼾在浏览器中输⼊了url之后,我们的SpringMVC项⽬就可以感知到⽤⼾ 的请求,并给予响应.
咱们学习SpringMVC,重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互.
主要分以下三个⽅⾯:
1. 建⽴连接:将⽤⼾(浏览器)和Java程序连接起来,也就是访问⼀个地址能够调⽤到我们的 Spring 程序。
2. 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数 的功能.
3. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾,也就是响应.
例如:⽐如⽤⼾去银⾏存款
1. 建⽴连接:去柜台
2. 请求:带着银⾏卡,⾝份证去存款
3. 响应:银⾏返回⼀张存折.
对于Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC.
项⽬准备
SpringMVC项⽬创建和SpringBoot创建项⽬相同,在创建的时候选择SpringWeb就相当于创建了 Spring MVC的项⽬.
SpringMVC使⽤SpringBoot的⽅式创建
SpringMVC更早期的实现⽅式,课程中不再讲解.
创建项⽬时,勾选上SpringWeb模块即可,如下图所⽰:

建⽴连接
在SpringMVC中使⽤@RequestMapping 来实现URL路由映射,也就是浏览器连接程序的作⽤ 我们先来看看代码怎么写
创建⼀个UserController类,实现⽤⼾通过浏览器和程序的交互,具体实现代码如下:
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,就可以看到程序返回的数据了

@RequestMapping 注解介绍
@RequestMapping 是SpringWebMVC应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的 路由映射的.
表⽰服务收到请求时,路径为/sayHi的请求就会调⽤sayHi这个⽅法的代码.
路由映射:当⽤⼾访问⼀个URL时,将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.
既然 @RequestMapping 已经可以达到我们的⽬的了,我们为什么还要加@RestController 呢?
我们把 @RestController 去掉,再来访问⼀次:

可以看到,程序报了404,找不到该⻚⾯.
这就是 @RestController 起到的作⽤.
⼀个项⽬中,会有很多类,每个类可能有很多的⽅法,Spring程序怎么知道要执⾏哪个⽅法呢?
Spring会对所有的类进⾏扫描,如果类加了注解@RestController,Spring才会去看这个类⾥⾯的⽅法 有没有加@RequestMapping 这个注解,当然他的作⽤不⽌这⼀点
@RequestMapping 使⽤
@RequestMapping既可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类路径+⽅ 法路径.
@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息
@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会拼接上⼀个/
@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路径也可以是多层路径,最终访问时,依然是类路径+⽅法路径
@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

@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="/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的情况,如下所⽰:
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...";
}
}
更多推荐



所有评论(0)