【Spring Boot】Web开发 — Web开发简介

Web开发简介

首先介绍Spring Boot 提供的Web组件spring-boot-starter-web,然后介绍@Controller和@RestController注解,以及控制数据返回的@ResponseBody注解,最后介绍Web配置,以便让读者对使用Spring Boot开发Web系统有初步的了解。

1.Web入门

Spring Boot将传统Web开发的mvc、json、validation、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置、开发的难度,将初学者从繁杂的配置项中解放出来,专注于业务逻辑的实现。

1.1 spring-boot-starter-web介绍

Spring Boot自带的spring-boot-starter-web组件为Web应用开发提供支持,它内嵌的Tomcat以及Spring MVC的依赖使用起来非常方便。

Spring Boot创建Web应用非常简单,先创建一个普通的Spring Boot项目,然后修改pom.xml文件将spring-boot-starter-web组件加入项目就可以创建Web应用。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

我们使用IDEA编辑器打开新创建的Web项目。打开Maven中的Dependencies,查看spring-boot-starter-web启动器(Starters)会引入哪些依赖JAR包,如图所示。

在这里插入图片描述

spring-boot-starter-web启动器主要包括web、webmvc、json、tomcat等基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。其中webmvc为Web开发的基础框架,json为JSON数据解析组件,tomcat为自带的容器依赖。所以,只需引入spring-boot-starter-web启动器即可实现Web应用开发,而无须额外引入Tomcat以及其他Web依赖文件。

另外,开发Web应用可能还会用到模板引擎,Spring Boot提供了大量的模板引擎,包括FreeMarker、Groovy、Thymeleaf、Velocity和Mustache等。Spring Boot官方推荐使用Thymeleaf。

1.2 Web项目结构

Spring Boot的Web应用与其他的Spring Boot应用基本没有区别,只是resources目录中多了static静态资源目录以及templates页面模板目录。

1.3 实现简单的Web请求

Spring Boot不像传统的MVC框架那样必须继承某个基础类才能处理HTTP请求,只需要在类上声明@Controller注解,标注这是一个控制器,然后使用@RequestMapping注解把HTTP请求映射到对应的方法即可。具体使用如下:

@RestController
public class HelloController {@RequestMapping("/hello")public String hello() {return "hello word";}
}

上面的示例中,@RequestMapping注解用于定义请求的路由地址,既可以作用在方法上,又可以作用在类上。

启动项目,在浏览器中访问http://localhost:8080/hello地址,就可以看到页面返回“hello world”。这说明一个简单的Web项目创建成功了。

2.@Controller和@RestController

Spring Boot提供了@Controller和@RestController两种注解来标识此类负责接收和处理HTTP请求。如果请求的是页面和数据,使用@Controller注解即可;如果只是请求数据,则可以使用@RestController注解。

2.1 @Controller的用法

Spring Boot提供的@Controller注解主要用于页面和数据的返回。下面创建HelloController响应前台页面请求,示例代码如下:

@Controller
@RequestMapping("user")
public class UserController {@RequestMapping("/index")public String index() {map.addAttribute("name", "thymeleaf-index");return "thymeleaf/index";}
}

上面的示例用于请求/user/index地址,返回具体的index页面和name=thymeleaf-index的数据。在前端页面中可以通过${name}参数获取后台返回的数据并显示到页面中。

在@Controller类中,如果只返回数据到前台页面,需要使用@ResponseBody注解,否则会报错。示例代码如下:

@Controller
public class HelloController {@RequestMapping("/hello")@ResponseBodypublic String hello() {return "hello word";}
}

2.2 @RestController的用法

Spring Boot提供的@RestController注解用于实现数据请求的处理。默认情况下,@RestController注解会将返回的对象数据转换为JSON格式。示例代码如下:

@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/getUser")public User getUser() {User u =new User();u.setName("lxml.123");u.setAge(25);u.setPassword("lxml.123");return u;}
}

在上面的示例中,定义/user/getUser接口返回JSON格式的User数据。同时,@RequestMapping注解可以通过method参数指定请求的方式。如果请求方式不对,则会报错。

近几年前端框架越来越强大,前后端分离的RESTful架构成为主流。Spring Boot对RESTful也做了非常完善的支持,使用也特别简单,使用@RestController注解自动返回JSON格式的数据,同时使用@GetMapping、PostMapping等注解实现映射RESTful接口。

2.3 @RestController和@Controller的区别

@Controller和@RestController注解都是标识该类是否可以处理HTTP请求,可以说@RestController是@Controller和@ResponseBody的结合体,是这两个注解合并使用的效果。虽然二者的用法基本类似,但还是有一些区别,具体如下:

1)@Controller标识当前类是Spring MVC Controller处理器,而@RestController则只负责数据返回。

2)如果使用@RestController注解,则Controller中的方法无法返回Web页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return中的数据。

3)如果需要返回指定页面,则使用@Controller注解,并配合视图解析器返回页面和数据。如果需要返回JSON、XML或自定义内容到页面,则需要在对应的方法上加上@ResponseBody注解。

4)使用@Controller注解时,在对应的方法上,视图解析器可以解析返回的JSP、HTML页面,并且跳转到相应页面。若返回JSON等内容到页面,则需要添加@ResponseBody注解。

5)@RestController注解相当于@Controller和@ResponseBody两个注解的结合,能直接将返回的数据转换成JSON数据格式,无须在方法前添加@ResponseBody注解,但是使用@RestController注解时不能返回JSP、HTML页面,因为视图解析器无法解析JSP、HTML页面。

总之,在Web系统中使用@Controller较多,而在Web API中基本使用@RestController注解。

3.@RequestMapping

@RequestMapping注解主要负责URL的路由映射。它可以添加在Controller类或者具体的方法上,如果添加在Controller类上,则这个Controller中的所有路由映射都将会加上此映射规则,如果添加在方法上,则只对当前方法生效。@RequestMapping注解包含很多属性参数来定义HTTP的请求映射规则。常用的属性参数如下:

  • value:请求URL的路径,支持URL模板、正则表达式。
  • method:HTTP请求的方法。
  • consumes:允许的媒体类型,如consumes="application/json"为HTTP的Content-Type。
  • produces:相应的媒体类型,如consumes="application/json"为HTTP的Accept字段。
  • params:请求参数。
  • headers:请求头的值。

以上属性基本涵盖了一个HTTP请求的所有参数信息。其中,value和method属性比较常用。

4 @ResponseBody

@ResponseBody注解主要用于定义数据的返回格式,作用在方法上,默认使用Jackson序列化成JSON字符串后返回给客户端,如果是字符串,则直接返回。

在Controller中有时需要返回JSON格式的数据,如果想直接返回数据体而不是视图名,则需要在方法上使用@ResponseBody。使用方式如下:

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/getUser")@ResponseBodypublic User getUser() {User u =new User();u.setName("lxml.123");u.setAge(25);u.setPassword("lxml.123");return u;}
}

在上面的示例中,请求/user/getUser时,返回JSON格式的User数据。这与@RestController的作用类似。

需要注意的是,使用@ResponseBody注解时需要注意请求的类型和地址,如果期望返回JSON,但是请求URL以html结尾的页面,就会导致Spring Boot认为请求的是HTML类型的资源,而返回JSON类型的资源,与期望类型不一致,因此报出如下错误:

在这里插入图片描述
根据RESTful规范的建议,在Spring Boot应用中,如果期望返回JSON类型的资源,URL请求资源后缀就使用json;如果期望返回视图,URL请求资源后缀就使用html。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下一个iic驱动(按键+点灯)-互斥

一、前提&#xff1a; 硬件部分&#xff1a; 1. rk3399开发板&#xff0c;其中的某一路iic&#xff0c;这个作为总线的主控制器 2. gd32单片机&#xff0c;其中的某一路iic&#xff0c;从设备。主要是按键上报和灯的亮灭控制。&#xff08;按键大约30个&#xff0c;灯在键的…

送呆萌的她一个皮卡丘(Python实现)

目录 1 呆萌的她 2 思维需要革新 3 送她的一个漂亮皮卡丘 4 Python完整代码奉上 1 呆萌的她 又是一季春风暖阳下, 你是一湾一湾羞涩的春波。 静静感受着&#xff0c; 你垂下的枝膊 在我的脸上轻轻抚摸 一对春燕,低低掠过 涟漪乍起&#xff0c;是你浅浅的笑窝...... 2 思…

(五)「消息队列」之 RabbitMQ 主题(使用 .NET 客户端)

0、引言 先决条件 本教程假设 RabbitMQ 已安装并且正在 本地主机 的标准端口&#xff08;5672&#xff09;上运行。如果您使用了不同的主机、端口或凭证&#xff0c;则要求调整连接设置。 获取帮助 如果您在阅读本教程时遇到问题&#xff0c;可以通过邮件列表或者 RabbitMQ 社区…

56 # 实现 pipe 方法进行拷贝

pipe 是异步的&#xff0c;可以实现读一点写一点&#xff0c;管道的优势&#xff1a;不会淹没可用内存&#xff0c;但是在导入的过程中无法获取到内容 const fs require("fs"); const path require("path");fs.createReadStream(path.resolve(__dirname…

前端 | (七)浮动 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 文章目录 &#x1f4da;浮动介绍&#x1f407;元素浮动后的特点&#x1f407;浮动小练习&#x1f525;盒子1右浮动&#x1f525;盒子1左浮动&#x1f525;所有盒子都浮动&#x1f5…

数学建模 插值算法

有问题 牛顿差值也有问题它们都有龙格现象&#xff0c;一般用分段插值。 插值预测要比灰色关联预测更加准确&#xff0c;灰色预测只有2次 拟合样本点要非常多&#xff0c;样本点少差值合适

Spring底层

配置文件 配置优先级 之前讲解过&#xff0c;可以用这三种方式进行配置 那如果这三种都进行了配置&#xff0c;那到底哪一份生效呢&#xff1f; 结论 优先级从大到小 properties>yml>yaml然后就是现在一般都用yml文件进行配置 其他配置方式 除了配置文件外 还有不同…

电压放大器在超声波焊接中的作用以及应用

电压放大器是一种运用于电子设备中的信号放大器&#xff0c;主要作用是将小信号放大为更高幅度的信号。在超声波焊接中&#xff0c;电压放大器起到了重要的作用&#xff0c;它可以将从传感器采集到的微小信号放大为能够被检测和处理的合适大小的信号。 超声波焊接是现代工业生产…

微信怎么自动加好友,通过好友后自动打招呼

很多客户朋友每天花大量的时间用手机搜索添加好友&#xff0c;这样的添加很集中也容易频繁&#xff0c;而且效率还低。对方通过后&#xff0c;有时也不能及时和客户搭建链接&#xff0c;导致客户也流失了。 现在可以实现自动添加和自动打招呼哦&#xff0c;只需要导入数据、设置…

【从零开始学CSS | 第二篇】伪类选择器

目录 前言&#xff1a; 伪类选择器&#xff1a; 常见的伪类选择器&#xff1a; 举例&#xff1a; 小窍门&#xff1a; 总结: 前言&#xff1a; 上一篇文章我们详细的为大家介绍了一些常见的选择器&#xff0c;这几篇我们将再次介绍CSS中的一个常见选择器——伪类选择器&am…

设计模式之适配器模式

写在前面 适配器设计模式属于结构型设计模式的一种&#xff0c;本文一起来看下。 1&#xff1a;介绍 1.1&#xff1a;什么时候适配器设计模式 当现有接口客户端无法直接调用时&#xff0c;我们可以考虑适配器设计模式&#xff0c;来定义一个能够供客户端直接调用的接口&…

软件测试的分类

代码分类&#xff1a; 1、黑盒测试 2、白盒测试 3、灰黑测试 黑盒测试&#xff1a; 把测试的对象看成是一个黑色的盒子的&#xff0c;看不到里面内部的结构&#xff0c;是对软件的一种功能性的测试。 白盒测试&#xff1a; 就是把测试的对象看成是一个透明的盒子&#x…

测试老鸟总结,性能测试-最佳并发和最大并发,性能测试实施...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试&#xf…

curl操作

下载路径&#xff1a;https://curl.se/windows/ 参考&#xff1a;https://blog.csdn.net/weixin_45191386/article/details/130652821 操作&#xff1a; curl http://localhost:8085/api/v1/aaa/bbbb/?ccc 652781344055627776

第四次CCF计算机软件能力认证

第一题&#xff1a;图像旋转 旋转是图像处理的基本操作&#xff0c;在这个问题中&#xff0c;你需要将一个图像逆时针旋转 90 度。 计算机中的图像表示可以用一个矩阵来表示&#xff0c;为了旋转一个图像&#xff0c;只需要将对应的矩阵旋转即可。 输入格式 输入的第一行包含两…

我国版式文档格式OFD前端WEB展示之EasyOFD

EasyOFD an ofd file web shower 一个在web端展示ofd文件的控件&#xff0c;该控件基于CANVAS绘制。 该控件使用了以下外部程序 1&#xff09;jszip&#xff1a;解决解压文件。 2&#xff09;x2js: 解决XML文件到JS转换 3&#xff09;easyjbig2: 解决ofd内部使用jb2文件存储的…

NSSCTF刷web(2)

[NISACTF 2022]bingdundun~ bingdundun处感觉像文件包含,改upload为index 发现确实,猜测会补一个后缀.php 那常规文件包含都不行了,这里还有一个文件上传的功能,考虑phar协议 <?php$phar new Phar("test.phar"); $phar->startBuffering(); $phar->setStu…

【excel细碎小知识点】

目录索引 &符号的用法&#xff1a;实例演示&#xff1a; 数字显示和位数的区别&#xff1a;分列功能的妙用&#xff1a;什么叫做常规类型&#xff1a; &符号的用法&#xff1a; **连接字符串:**转化后都是文本字符串类型。你可以通过修改数据类型进行更多可能的操作 实…

【Go语言开发】简单了解一下搜索引擎并用go写一个demo

写在前面 这篇文章我们一起来了解一下搜索引擎的原理&#xff0c;以及用go写一个小demo来体验一下搜索引擎。 简介 搜索引擎一般简化为三个步骤 爬虫&#xff1a;爬取数据源&#xff0c;用做搜索数据支持。索引&#xff1a;根据爬虫爬取到的数据进行索引的建立。排序&#xf…

prometheus调整默认数据存储时间

调整kubernetes部署的prometheus数据存储时间 由于prometheus是用kuberentes部署的&#xff0c;没办法像传统部署方式那种直接在启动参数增加存储时间的参数。需要在configmap里或者在deployment里添加&#xff0c;我这里使用的方式是在deployement里添加调整存储时间的参数。…