前言:
大家好,我是良辰丫,从今天开始,我们就要进入Spring MVC的学习了,前面的文章中我们的很多注解都没有讲解,是不是看的脑瓜嗡嗡的,哈哈,没关系,在我们Spring MVC中我们就要详细讲解那些注解了,请跟随良辰的脚步,gogogo! ! !
个人主页:良辰针不戳
所属专栏:javaEE进阶篇之框架学习
励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
期待大家三连,关注,点赞,收藏。
作者能力有限,可能也会出错,欢迎大家指正。
愿与君为伴,共探Java汪洋大海。
官方的描述大致翻译为 : Spring Web MVC是基于Servlet API构建的原始 Web框架,它从一开始就包含在Spring框架中, Spring Web MVC经常被称为 Spring MVC.
- Spring MVC是基于Servlet构建的.
- Spring MVC是一个Web框架.
- Spring MVC来自于Spring webMVC模块.
看了上面,还是稀里糊涂的,什么鬼,Spring MVC是个啥,说了好像又没说.哈哈,没关系,我们慢慢往下看.
学习Spring MVC,我们首先要了解MVC.
- Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。.
- View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的.
- Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,
控制⽤户输⼊,并向模型发送数据。
概念比较难理解,那么我们可以通过图解加深我们对MVC三个基本部分的理解.
1. 在Spring Boot中为什么要学习Spring MVC?
2. Spring MVC学习哪些内容?
- 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的
Spring 程序.- 获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数.
- 输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户.
我们目前常用的Spring MVC 是基于 Spring Boot 创建,也就是创建⼀个 Spring Boot 项⽬,勾选上 Spring Web模块,其余的和创建Spring Boot没啥区别.
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,一定要记住这三个注解在类上同时使用,同时出现,在方法上我们暂时值需要一个路由注册的注解即可.
我们使用我们的抓包工具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请求,观察一下.
不用死记硬背这些,我们记住常用的,剩下的需要的查资料即可.
// 写法1
@RequestMapping("/index")
// 写法2
@RequestMapping(value = "/index",method = RequestMethod.GET)
// 写法3
@GetMapping("/index")
// 写法1
@RequestMapping(value = "/index",method = RequestMethod.POST)
// 写法2
@PostMapping("/index")
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.
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;
}
}
- 学到这里,想必大家对Spring MVC有了一定的认识了,这篇文章的主要作用是带领大家基本了解Spring MVC.
- 接下来,我将协同大家一起去了解热部署,这将帮助我们更好的运行Spring MVC程序,什么是热部署呢?我们往下看.
热部署
是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效。但是对配置文件的修改除外!- 了解了热部署的基本概念,就来对热部署进行一定的配置.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
此时我们的当前项目进行了设置,但是当我们新创建一个项目的时候还需要进行配置,那么我们还需要进行一个配置,在以后的项目中就不需要进行配置了.
- 这样之后,我们的热部署就生效了,不用我们自己重启服务器,热部署操作会帮我们重启服务器,是不是很方便呢?
- 接下来我们就来验证以下热部署.
我们刚开始的写法 :
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;
}
}
修改之后的代码,我们修改代码后,不需要进行手动重启,热部署会帮我们完成.
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;
}
}
修改之后访问页面如下,可见我们的热部署配置成功了.