标题: 【SpringMVC】Spring Web MVC入门(一) [打印本页] 作者: 涛声依旧在 时间: 2024-8-16 07:29 标题: 【SpringMVC】Spring Web MVC入门(一)
前言
前面我们了解了什么是Spring,那么今天我将为各人分享一种在日常网站开辟中使用非常广泛的框架——Spring Web MVC。
什么是Spring Web MVC?
先来看看官方解释。
Spring Web MVC是Spring Framework提供的Web组件,它是一个MVC计划模式的框架,主要用于开辟机动、松散耦合的Web应用程序。它提供了模型-视图-控制(Model-View-Controller,简称MVC)的体系结构和可以用来开辟Web应用程序的组件。
Spring Web MVC是一种基于Java的实现了Web MVC计划模式的哀求驱动范例的轻量级Web框架。它使用了MVC架构模式的头脑,将web层进行职责解耦,基于哀求驱动指的就是使用哀求-响应模型,框架的目标就是资助简化日常Web开辟的。Spring Web MVC也是要简化我们日常Web开辟的。
一直提到 MVC 架构模式,那么到底什么是 MVC 呢?
什么是MVC
MVC 是一种架构计划模式,也是一种头脑,而 Spring MVC 则是对 MVC 头脑的具体实现,除此之外,Spring MVC 还是一个 Web 架构。
总结来说,Spring MVC 就是一个实现了 MVC 架构模式的 Web 框架。
在前面我们创建 Spring Boot 项目标时候,勾选的 Spring Web 框架其实就是 Spring MVC 框架。
那么这里有 Spring Boot 又有 Spring MVC,那么它们两个之间的区别是什么呢?
Spring Boot 和 Spring MVC 的区别
什么是Spring Boot?
Spring Boot是由Pivotal团队提供的全新框架,其计划目标是用来简化新Spring应用的初始搭建以及开辟过程。该框架使用了特定的方式来进行配置,从而使开辟人员不再必要界说样板化的配置。通过这种方式,Spring Boot致力于在发达发展的快速应用开辟领域(rapid application development)成为领导者。Spring Boot是Spring家属的一个子项目,其计划初衷是为了简化Spring配置,从而可以轻松构建独立运行的程序,并极大进步开辟效率。
关系和区别
Spring MVC是一个用于构建Web应用程序的框架,它基于MVC计划模式,将业务逻辑、数据和界面体现分离,减少了各组件之间的依赖,进步了代码的可重用性。Spring MVC必要手动配置XML或其他范例的配置文件来管理应用程序的各个组件和依赖关系。
Spring Boot则是一个更为当代化的框架,它旨在简化Spring应用的初始搭建以及开辟过程。通过约定优于配置的原则,Spring Boot可以自动配置应用程序的各种组件和依赖关系,制止了繁琐的手动配置过程。此外,Spring Boot还提供了许多内置的功能和工具,如内嵌的Web服务器、自动化测试、安全控制等,使得开辟人员可以更加专注于业务逻辑的实现。
因此,可以说Spring Boot是Spring MVC的一种升级和优化,它通过自动配置和内置的工具简化了开辟过程,进步了开辟效率。同时,Spring Boot也支持使用Spring MVC等其他Spring组件,可以与它们无缝集成。
简单点来说,就是 Spring MVC 是通过 Spring Boot 添加 Spring MVC 依赖来实现 web 功能的。
固然 Spring MVC 实现了 MVC 架构模式,但 Spring MVC 也结合了自身的特点,做了一些改变。
Spring MVC 学习
在知道了什么是 Spring MVC 之后,我们就可以来学习 Spring MVC 了,而学习 Spring MVC 关键是学习它的注解,由于在 Spring MVC 中,会使用到非常多的注解。
注解介绍
1. @SpringBootApplication
当我们创建完成一个 Spring MVC 项目之后,就会自动生成一个 “项目名”+Application 的类,而且在这个类中我们就可以看到第一个注解。
@SpringBootApplication 是一个方便的注解,它是 @SpringBootConfiguration 和 @EnableAutoConfiguration 的组合。这个注解让我们快速地开始一个 Spring Boot 项目。
@SpringBootConfiguration:该注解表示当前类是一个 Spring Boot 的配置类,它会包含一些根本的 Spring Boot 配置。
@EnableAutoConfiguration:该注解用于告诉 Spring Boot,根据当前项目中的类路径以及已经配置的属性,自动地选择和配置必要的 Bean。这大大简化了新项目标设置。
当你在 Spring Boot 项目中使用 @SpringBootApplication 注解时,它会自动配置一个开辟环境,以便你可以快速启动并测试你的应用程序。同时,它也提供了一个根本的目录结构,让你可以更轻易地管理你的代码。
也就是说 @SpringBootApplication 注解的类是 Spring MVC 项目标启动类,项目启动就是从这个类启动的。
我们先写一个简单的 Spring MVC 代码。
在 Spring MVC 中,我们可以使用跟通报来的参数相同的名字就可以获取到这个参数,这都是 Spring MVC 底层都帮我们做好了的,其实 Spring MVC 底层为我们做了很多事情,发送来的哀求在由 Controller 转发到 Mudel 的时候,一些我们大概必要用到的东西,都是 Spring MVC 底层帮我们处理过的,假如想要使用只必要拿到就可以了。
而且浏览器能接收的数据范例中没有 text/plain,所以浏览器就会对返回的数据进行解析,看返回的数据可以解析成能接收的数据范例中的哪一种,由于我们返回的字符串是一个 html 片段,所以就会被解析为 html 范例。
样,我们还可以使用同样的方法返回CSS、JavaScript、json等范例。
5.4 返回JSON
Spring MVC 也可以返回 JSON 数据。
@RequestMapping("/returnjson")
@ResponseBody
public Map<String, String> returnJson() {
Map<String, String> map = new HashMap<>();
map.put("java", "java value");
map.put("python", "python value");
return map;
}
复制代码
这里为什么返回的范例是 Map 范例,末了我们抓包抓取到的响应的数据范例还是 JSON 呢?
通过 Fiddler 抓取到的哀求数据包中的 Accept 可以知道,当前接收任何范例的响应,也就是说,发送端没有明确的指出接收响应的数据范例,由于我们代码返回的数据范例是 Map,是一个对象,那么我们的 Spring MVC 注解@ResponseBody 会默认使用 Jackson 库对返回的数据范例进行序列化/反序列化,所以就会将我们返回的 Map 范例转换为 JSON 数据范例,而接收端能接收到任何范例的响应,所以接收到的数据范例就是 JSON 数据范例。
5.5 设置状态码
Spring MVC 设置状态码必要使用到 HttpServletResponse 类中的 setStatus() 方法。
@RequestMapping("/returnstatus")
@ResponseBody
public String returnStatus(HttpServletResponse response) {
response.setStatus(401);
return "设置状态码成功";
}
复制代码
5.6 设置header
Spring MVC 设置状态码必要使用到 HttpServletResponse 类中的 setHeader() 方法。
@RequestMapping("/setheader")
@ResponseBody
public String setHeader(HttpServletResponse response) {
response.setHeader("myheader", "666");
return "设置header成功";
}
复制代码
5.7 设置响应的Content-Type
Spring MVC 会根据我们返回的数据大概视图自动为我们设置相应的数据范例,当然我们也可以自己设置相应的数据范例。在 Spring MVC 中,设置响应中的数据范例必要更改 @ReqeustMapping 注解中的 produces 参数的值。