🌻1.什么是Spring MVC?
Spring MVC是一个基于Servlet API构建的Web框架,是一种基于MVC(模型-视图-控制器)模式的框架,用于构建Web应用程序。它是Spring框架的一部分,提供了一个容易扩展和灵活的方式来开发Web应用程序。
Spring MVC特性:
1.Spring MVC是一个Web框架
2.Spring MVC是基于Servlet api构建的
🍬1.1什么是MVC?
MVC,全称Model Version Controller,模型视图控制器,是一种软件架构模式
MVC执行流程
图片版本
文字版本
1.用户发出请求先到Controller
2.Comtroller把请求转发给Model层
3.Model处理请求并将数据返回给Controller
4.Controller继续转发数据给View
5.View将数据可视化返回给用户
Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,控制⽤户输⼊,并向模型发送数据.
模型(Model):负责数据管理和业务逻辑,通常包括数据库操作、数据验证、数据转换等。
视图(View):负责呈现数据给用户,通常包括用户界面、报表、图表等。
🍬1.2MVC和Spring MVC的关系
MVC是一种思想,Spring MVC是MVC思想的具体实现
🌻2.Spring MVC的意义
⼤部分的 Java 项⽬都是基于 Spring(或 Spring Boot)的,Spring 的核⼼就是 SpringMVC,也就是说 Spring MVC 是 Spring 框架的核⼼模块,所以Spring MVC很重要
🍬2.1Spring MVC和Spring Boot区别
Spring MVC是Spring Framework的一部分,它是一个基于Servlet的Web框架,用于开发Web应用程序。它提供了一种按照模型-视图-控制器(MVC)模式来组织代码的方式,使得Web应用程序的开发更加灵活和可维护。在开发过程中,需要手动配置各种依赖项和设置。
Spring Boot是一个基于Spring Framework的快速开发框架,它的目的是简化Spring应用程序的开发、部署和运行。它提供了自动配置、约定优于配置(Convention over Configuration)和快速启动等功能,使得开发者无需手动配置和管理依赖项,只需添加所需的依赖项即可快速启动应用程序。
Spring Boot在某些方面比Spring MVC更加方便和简化,尤其是在快速开发和部署方面。但是,Spring MVC的灵活性更高,它可以更好地满足定制化需求
🌻3.Spring MVC的三大要点
连接功能:用户和服务器程序连接
获取参数:用户访问带的参数后端可以获取
返回数据:服务器处理好请求,返回给用户
🍬3.1Spring MVC创建和连接
🧊3.1.1 创建Spring MVC项目
Spring MVC项目就是基于Spring Boot项目多了一个Spring Web依赖
🧊3.1.2实现客户端和程序之间的连接
🍧3.1.2.1@RequestMapping,@PostMapping,@GetMapping
@RequestMapping既可以修饰类又可以修饰方法,一般来说方法是一定要加这个注解的,类可加可不加
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created with IntelliJ IDEA. * Description: * User: WHY * Date: 2023-08-04 * Time: 17:27 */ @RestController @RequestMapping("/test") public class TestController { @RequestMapping("/hi") public String sayHi(){ return "hi ,spring mvc"; } }
运行结果
那么方法可以写多个路径吗?可以的
默认情况下@RequestMapping既支持get请求又支持post请求
我们来验证一下,这个时候就得请出我们的老朋友了postman
由此可见上述结论正确
那么如果想要一个post请求呢?
三种方法
🥝1.采用@RequestMapping("/xxx)
🥝2.@RequestMapping(value = “/xxx”,method = RequestMethod.POST)
@RequestMapping(value = "/hii",method = RequestMethod.POST) public String sayhi2(){ return "zezeze"; }
method规定了请求的方法为post
这里的post请求是不支持get请求的,因为默认浏览器的URL都被封装为get请求
🥝3.@PostMapping(“/xxx”)
@PostMapping("/h") public String sayhi(){ return "wyb"; }
如果想要一个get请求呢?
- @RequestMapping(“/xxx”)
2.@RequestMapping(value=“/xxx”,method=RequestMethod.GET)_
@RequestMapping(value = "/hiii",method = RequestMethod.GET) public String sayhi3(){ return "zezeze"; }
3.@GetMapping(“/xxx”)
@GetMapping("/hello") public String saihi4(){ return "who"; }
🍬3.2获取参数
🧊3.2.1获取单个参数
比如要获取姓名
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; /** * Created with IntelliJ IDEA. * Description: * User: WHY * Date: 2023-08-04 * Time: 20:02 */ @RestController @RequestMapping("/u") public class TestController2 { @RequestMapping("/h") public String getName(HttpServletRequest request){ return "Name"+request.getParameter("name" ); } }
因为Spring MVC是基于servlet实现的,所以获取参数可以使用servlet的那一套方法获取,但是有了Spring MVC,就有了更简单的写法
package com.example.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; /** * Created with IntelliJ IDEA. * Description: * User: WHY * Date: 2023-08-04 * Time: 20:02 */ @RestController @RequestMapping("/u") public class TestController2 { @RequestMapping("/h") public String getName(HttpServletRequest request){ return "Name"+request.getParameter("name" ); } @RequestMapping("/b") public String getName2(String name){ return "Name"+name; } }
也是没有问题的
🧊3.2.2 获取多个参数
比如要获取姓名和年龄
@RequestMapping("/d") public String get(String name,Integer age){ return "Name"+name+"Age"+age; }
🧊3.2.3 获取对象
package com.example.demo.controller; import com.example.demo.model.User; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created with IntelliJ IDEA. * Description: * User: WHY * Date: 2023-08-04 * Time: 20:21 */ @RestController @RequestMapping public class UserController { @RequestMapping("/getUser") public User getUser(User user){ return user; } }
啥都不传递的时候会发现都是该类型的默认值
现在进行传参
我们在浏览器拿到结果的时候发现一个问题
浏览器显示的是json对象,我们在后端没有手动的转换对象
在servlet阶段,我们需要使用jQuery的objectMappper对象的方法将Java对象转换为json字符串,然后返回给前端,现在有了框架,框架为我们自动转换为json格式返回给前端~~
如果返回的是HTML格式,就会直接返回成HTML,不会再自动转换
举个例子
@RequestMapping("/html") public String html(){ return "<h1>hello<h1>"; }
抓包看看
类型就是text/plain,也就是text/html
🧊3.2.4表单传递参数
采用postman 演示
传递成功,后端返回的依然是json格式