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

news2024/11/24 1:52:00

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")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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.coloradmin.cn/o/766456.html

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

相关文章

微服务sleuth+zipkin---链路追踪+nacos配置中心

目录 1.分布式链路追踪 1.1.链路追踪Sleuth介绍 1.2.如何完成sleuth 1.3.zipkin服务器 2.配置中心 2.1.常见配置中心组件 2.2.微服务集群共享一个配置文件 2.2.1实时刷新--配置中心数据 2.2.2.手动写一个实时刷新的配置类 ----刷新配置文件 2.3.多个微服务公用一个配…

前端是不是快没了?

前言 可能是近些年前端的就业行情不好让你产生了这样的错觉&#xff1f;首先明确一点是我们不能拿市场就业、招聘的情况来判断一个行业的存亡&#xff0c;前端在目前仍然是有着比较大的需求&#xff0c;包括是在网页端、移动端、小程序方面&#xff0c;企业对于这些方面的需求…

msvcp140.dll丢失怎么弄?分享几个最靠谱的解决方法

当你在运行某个程序或游戏时&#xff0c;突然收到一个错误提示&#xff0c;提示你的计算机缺少msvcp140.dll文件。这意味着你的计算机中缺少一个重要的系统文件&#xff0c;可能会导致程序无法正常运行。下面是一些详细的解决方法&#xff0c;帮助你解决msvcp140.dll丢失的问题…

【力扣算法15】之 17. 电话号码的字母组合 python

文章目录 问题描述示例1示例2示例 3提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果 完结 问题描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键…

获取微信服务器IP地址

获取微信服务器IP地址 如果公众号基于安全等考虑&#xff0c;需要获知微信服务器的IP地址列表&#xff0c;以便进行相关限制&#xff0c;可以通过该接口获得微信服务器IP地址列表或者IP网段信息。 由于出口IP及入口IP可能存在变动&#xff0c;建议用户每天请求接口1次&#x…

鲸鱼优化算法MATLAB代码

论文 Seyedali Mirjalili,Andrew Lewis. The Whale Optimization Algorithm[J]. Advances in Engineering Software,2016,95.func_plot.m % This function draw the benchmark functionsfunction func_plot(func_name)[lb,ub,dim,fobj]Get_Functions_details(func_name);switch…

Dcat-admin使用 Alpine 双向数据绑定

介绍 Alpine.js 这东西真的轻量级&#xff0c;和vue相似&#xff0c;和 livewire 同一个作者&#xff0c;推荐大家使用&#xff0c;可以平替jquery 效果 实现 在 bootstrap.php 引入js Admin::headerJs([https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-y/alpinejs/3.9.0/…

【Go】Go语言开发0基础7天入门 - 笔记

前言 课程来源&#xff1a;【路飞学城】-黑金年卡VIP课程 课程名称&#xff1a;GO语言开发0基础7天入门 讲师&#xff1a;【前汽车之家架构师】Wusir-银角大王 官网&#xff1a;点击进入 一、Why choose the go language 集python简洁 C语言性能 详情点击 二、学语言阶段…

Java基础之复习(下)

目录 前言 一.泛型的认知 &#x1f496;泛型类 &#x1f496;泛型数组 &#x1f496;泛型的上界 &#x1f496;泛型的方法 二.内部类讲解 三.了解异常 四.面向对象编程 &#x1f496;包 &#x1f496;继承 &#x1f496;多态 &#x1f496;抽象类和接口 &#x1f38…

OWASP TOP10 大主流漏洞原理和防范措施,易理解版

章节目录 回顾2017年和2021年OWASP主流漏洞都有哪些 一、访问控制崩溃 表现形式 防范 二、敏感数据暴露 防范 三、注入 sql注入分类 SQL盲注 SQL注入产生点 SQL注入的思路 盲注测试的思路 防范SQL 四、不安全的设计 产生的原因 业务漏洞的显现体现 五、安全配…

【C语言14】C语言实现顺序表(这可能是CSDN有史以来讲解最详细的顺序表)

顺序表 什么是顺序表顺序表的接口创建及使用1.创建2.初始化3.扩容4.尾插5.打印6.头插7.尾删8.头删9.查找10.删除任意位置11.插入任意位置12.修改 什么是顺序表 官方定义&#xff1a;顺序表是在计算机内存中以数组的形式保存的线性表&#xff0c;线性表的顺序存储是指用一组地址…

【运维小知识】(一)——centos系统安装(小白入门级)

目录 1.制作系统U盘 2.安装centos系统 3.系统配置 3.1【语言】配置​编辑 3.2【软件选择】配置 3.3【安装位置】配置 3.4【主机名、root密码、网络】配置 1.制作系统U盘 首先下载软件ventoy&#xff0c;制作系统U盘&#xff0c;买个新U盘。先在笔记本电脑安装ventoy软件&a…

【产品设计】如何从0到1做一款微信服务号

微信小程序、服务号作为企业用于在微信内提供服务的工具&#xff0c;已经越来越被广泛使用&#xff0c;对于选择使用哪一种方式来进行开发&#xff0c;在这里表述了我的看法。 前段时间&#xff0c;我们公司准备做一款关于兼职老师招聘的小程序&#xff0c;后来由于种种原因&am…

Flutter 小技巧之滑动控件即将“抛弃” shrinkWrap 属性

相信对于 Flutter 开发的大家来说&#xff0c; ListView 的 shrinkWrap 配置都不会陌生&#xff0c;如下图所示&#xff0c;每当遇到类似的 unbounded error 的时候&#xff0c;总会有第一反应就是给 ListView 加上 shrinkWrap: true 就可以解决问题&#xff0c;那为什么现在会…

Linux进程控制(一)---进程创建和终止(写时拷贝,exit与_exit等)

目录 进程创建 fork()函数 子进程如何继承父进程的数据 1.创建时拷贝分离 2.写时拷贝★ 进程终止 进程终止时&#xff0c;操作系统做了什么&#xff1f; 进程终止的常见方式 代码运行完毕&#xff0c;结果正确 退出码★ 代码运行完毕&#xff0c;结果不正确 代码异…

Redis 读写分离 使用redisTemplate执行lua脚本时,报错处理

项目框架说明 项目配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version></parent>....<dependency><groupId>org.springfra…

Mac苹果装机工作必备软件推荐,十大效率神器让你的 Mac 雄起

Mac笔记本固然好用&#xff0c;但还是会有一些使用中的痛点&#xff0c;下面给大家推荐10款最常用的提高mac使用效率的软件 一、Magnet Pro - 窗口大小布局位置控制 这款软件可以让你的Mac像Windows一样&#xff0c;通过拖动窗口实现窗口最大化、左右半屏、上下半屏、1/4窗口…

Ubuntu18.04下的labelImg使用教程

Ubuntu18.04下的labelImg使用教程 1、安装 # 下载labelImg git clone https://github.com/Ruolingdeng/labelImg.git# 配置环境 sudo apt-get install pyqt5-dev-tools sudo pip3 install -r requirements/requirements-linux-python3.txt make qt5py3# 运行 python3 labelImg.…

mysql 1 -- 数据库介绍、mysql 安装及设置

Linux 安装 mysql 1、数据库&#xff08;mysql&#xff09; 数据文件 - 数据库过了系统 2、c/s mysql 服务器 mysql 客户端 ip port : 3306 3、关系型 于 非关系型数据库&#xff08;nosql&#xff09; nosql可以解决一些关系型数据库所无法实现的场景引用。 一、数据库介绍 …

什么是 Elasticsearch 索引?

作者&#xff1a;David Brimley 索引这个术语在科技界已经被用满了。 如果你问大多数开发人员什么是索引&#xff0c;他们可能会告诉你索引通常指的是关系数据库 (RDBMS) 中与表关联的数据结构&#xff0c;它提高了数据检索操作的速度。 但什么是 Elasticsearch 索引&#xff…