前言:
大家好,我是良辰丫,从今天开始,我们就要进入Spring MVC的学习了,前面的文章中我们的很多注解都没有讲解,是不是看的脑瓜嗡嗡的,哈哈,没关系,在我们Spring MVC中我们就要详细讲解那些注解了,请跟随良辰的脚步,gogogo! ! !💌💌💌
🧑个人主页:良辰针不戳
📖所属专栏:javaEE进阶篇之框架学习
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。
目录
- 1. 初识Spring MVC
- 1.1 MVC的介绍
- 1.2 MVC 和 Spring MVC 的关系
- 2. 进一步了解Spring MVC
- 2.1 Spring MVC 的创建和连接
- 2.1.1 创建Spring MVC项目
- 2.1.2 使用Spring MVC
- 2.2 关于@RequestMapping 是 post 还是 get 请求?
- 2.2.1 GET请求的三种写法
- 2.2.2 POST请求的两种写法
- 3. 获取基本参数
- 3.1 获取单个参数
- 3.2 获取多个参数
- 4. 热部署
1. 初识Spring MVC
官方的描述大致翻译为 : Spring Web MVC是基于Servlet API构建的原始 Web框架,它从一开始就包含在Spring框架中, Spring Web MVC经常被称为 Spring MVC.
- Spring MVC是基于Servlet构建的.
- Spring MVC是一个Web框架.
- Spring MVC来自于Spring webMVC模块.
看了上面,还是稀里糊涂的,什么鬼,Spring MVC是个啥,说了好像又没说.哈哈,没关系,我们慢慢往下看.
1.1 MVC的介绍
学习Spring MVC,我们首先要了解MVC.
- MVC是Model View Controller的缩写,是软件工程的一种软件架构模式.
- MVC把软件系统分为模型,视图和控制器三个基本部分.
- Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。.
- View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的.
- Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,
控制⽤户输⼊,并向模型发送数据。
概念比较难理解,那么我们可以通过图解加深我们对MVC三个基本部分的理解.
1.2 MVC 和 Spring MVC 的关系
- MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现.
- 总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的Spring MVC项目就可以感知到用户的请求.
2. 进一步了解Spring MVC
1. 在Spring Boot中为什么要学习Spring MVC?
- 现在绝⼤部分的 Java 项⽬都是基于 Spring(或 Spring Boot)的,⽽ Spring 的核⼼就是 Spring MVC。
- Spring MVC 是 Spring 框架的核⼼模块,⽽ Spring Boot 是 Spring框架 的核心,因此我们可以说Spring MVC是Spring框架的灵魂,所以我们需要去学习Spring MVC.
- 在我们创建Spring Boot项目的时候,一定要选择Spring MVC, Spring MVC 是因为它是⼀切项⽬的基础,要不然绝大多数功能不能用,也就是Spring Boot失去了灵魂,Spring Web就是Spring MVC.
2. Spring MVC学习哪些内容?
- 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的
Spring 程序.- 获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数.
- 输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户.
2.1 Spring MVC 的创建和连接
- Spring MVC 项⽬创建和 Spring Boot 创建项⽬相同(Spring MVC 使⽤ Spring Boot 的⽅式创建),在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项⽬。
- 在 Spring MVC 中使⽤ @RequestMapping 来实现 URL 路由映射,也就是浏览器连接程序的作⽤。
- 然后要进行地址访问:http://localhost:8080/user/hi,能打印“你好,叶良辰”的信息。
2.1.1 创建Spring MVC项目
我们目前常用的Spring MVC 是基于 Spring Boot 创建,也就是创建⼀个 Spring Boot 项⽬,勾选上 Spring Web模块,其余的和创建Spring Boot没啥区别.
2.1.2 使用Spring MVC
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller//加载当前类
@RequestMapping("/user")//路由注册
@ResponseBody//告诉程序返回的是一个数据,不是页面
public class User {
@RequestMapping("/hello")
public String say(){
return "你好,叶良辰";
}
}
在我们之前就已经接触过这些注解,但是我们当时根本不知道这些注解表示什么,稀里糊涂的用,哎呀,真的是饱受折磨,只能用,咱也不敢问.哈哈,苦尽甘来了,今天呢,我就与大家一起去了解我们注解的深意.
- Controller注解我们已经在Spring中接触过,当时我们介绍了类的五大注解,表示把对象存储在Spring容器中,其实这里也可以这样理解;我们可以简单理解为加载类,没有该注解就无法正常使用.
- 那么Controller可以换成五大注解中其它的注解嘛?换成其它的运行没有问题,可以正常进行访问,但是我们的每个注解表示不同的含义,Controller注解表示应用程序与用户进行交互,希望大家可以明白这一点.
- @RequestMapping表示路由注册,什么是路由注册呢?其实就是指明一个地址,我们的Spring MVC是以方法作为最小单位的,所以只有一个类的路由地址还不行,还需要给方法搞一个路由地址.
- @ResponseBody这个注解告诉程序返回的是一个数据,不是页面.
- @RestController等于@ResponseBody加上@Controller.
- 我们在刚开始学习Speing MVC,一定要记住这三个注解在类上同时使用,同时出现,在方法上我们暂时值需要一个路由注册的注解即可.
2.2 关于@RequestMapping 是 post 还是 get 请求?
我们使用我们的抓包工具fiddler进行抓包,我们会发现RequestMapping默认情况下是get请求.
当然,我们也可以指定我们需要哪种请求.
package com.example.demo;
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;
@Controller
@RequestMapping("/user")
@ResponseBody
public class User {
@RequestMapping(value = "/hello",method = RequestMethod.POST)
public String say(){
return "你好,叶良辰";
}
}
接下来,我们通过postman构造一个post请求,观察一下.
2.2.1 GET请求的三种写法
不用死记硬背这些,我们记住常用的,剩下的需要的查资料即可.
// 写法1
@RequestMapping("/index")
// 写法2
@RequestMapping(value = "/index",method = RequestMethod.GET)
// 写法3
@GetMapping("/index")
2.2.2 POST请求的两种写法
// 写法1
@RequestMapping(value = "/index",method = RequestMethod.POST)
// 写法2
@PostMapping("/index")
3. 获取基本参数
3.1 获取单个参数
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user2")
public class User2 {
@RequestMapping("hello")
public String say(String name){
return "你好 , "+name;
}
}
我们在进行访问页面不进行传参的时候会打印null.
我们在访问页面进行传参就会打印我们传参的内容.
3.2 获取多个参数
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user2")
public class User2 {
@RequestMapping("hello")
public String say(String id,String name){
return "id : "+id+"<br>"+"name : "+name;
}
}
- 在我们不传任何参数的时候,仍然会打印null.
2. 我们传递一个参数的时候,另一个会打印null.
- 传递两个参数的时候,都会打印传递参数的值.
- 学到这里,想必大家对Spring MVC有了一定的认识了,这篇文章的主要作用是带领大家基本了解Spring MVC.
- 接下来,我将协同大家一起去了解热部署,这将帮助我们更好的运行Spring MVC程序,什么是热部署呢?我们往下看.
4. 热部署
热部署
是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效。但是对配置文件的修改除外!- 了解了热部署的基本概念,就来对热部署进行一定的配置.
- 引入框架支持(依赖)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
- 通过settings设置项目的自定编译功能.
此时我们的当前项目进行了设置,但是当我们新创建一个项目的时候还需要进行配置,那么我们还需要进行一个配置,在以后的项目中就不需要进行配置了.
- 开启热部署.
- 这样之后,我们的热部署就生效了,不用我们自己重启服务器,热部署操作会帮我们重启服务器,是不是很方便呢?
- 接下来我们就来验证以下热部署.
我们刚开始的写法 :
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user2")
public class User2 {
@RequestMapping("hello")
public String say(String id,String name){
return "id : "+id+"<br>"+"name : "+name;
}
}
修改之后的代码,我们修改代码后,不需要进行手动重启,热部署会帮我们完成.
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user2")
public class User2 {
@RequestMapping("hello")
public String say(String id,String name){
return "id : "+id+" | "+"name : "+name;
}
}
修改之后访问页面如下,可见我们的热部署配置成功了.