SpringBoot教程(三) | Spring Boot初体验

SpringBoot教程(三) | Spring Boot初体验

上篇文章我们创建了SpringBoot 项目,并且进行了简单的启动。整个项目了里其实我们就动了两个文件,一个是pom.xml负责管理springboot的相关依赖,一个是springBoot的启动类。

pom文件中通过starter的形式大大简化了配置,不像以前一样需要引入大量的依赖配置,搞不好还得解决冲突。 启动类里就一个main方法,让我们通过一个简单的注解,就可以启动整个项目。相比于之前的ssm简直不要太香。

3.1 Controller开发

那么接下来我们就在这个项目的基础之上来开发一个接口。这里就需要大家要有springmvc的学习基础了。在springmvc中接口的开发都是以controller的形式出现的,那么接下来我们在我们的包结构下创建一个controller包,然后在包里创建一个controller类。

结构如下:

image.png FirstController中全部内容;

java复制代码package com.lsqingfeng.springboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @className: FirstController
 * @description: 第一个Controller
 * @author: sh.Liu
 * @date: 2022-01-10 15:21
 */
@RestController
public class FirstController {

    @RequestMapping("/hello")
    public String helloWorld(){
        return "hello world";
    }
}

重新clean, package, 运行启动类。

在浏览器访问: http://localhost:8080/hello

结果如下:

image.png

代表我们的接口已经开发完成,并成功返回了数据。其实上面这些操作完全就是springMvc框架中的内容了,经过前面的配置,相当于我们已经可以在框架中完全使用springmvc了。

3.2 一些问题

1. 关于包扫描

大家都知道,我们在使用ssm的时候,是需要配置一个要扫描的基础包的。一般可以在spring的配置文件的xml中,也可以自通过@ComponentScan注解进行配置。只有配置了相应的包的扫描,那么被扫描的包中的 带有 @Controller, @Service, @Repository, @Component 等注解的类才能够被spring管理,那我们的springBoot项目中并没有配置包的扫描,为什么 我们的Controller能够被扫描到呢(这个Contrller肯定是被扫描到了,否则程序就不可能生效)?

这是因为SpringBoot有一套默认的包扫描规则,当我们没有配置对应的ComponentScan 的时候,程序默认扫描启动类所在的包及其子包。 由于我们创建的controller包正是在启动类所在包下面的一个子包里,所以里边的FirstController可以别扫描到。

当然我们也可以通过@ComponentScan 注解去配置我们想要扫描的包。但是要注意不能在启动类上写,因为启动类上的@SpringBootApplication 注解中已经包含了@ComponentScan注解,那如果我们想要配置应该怎么办呢,那就需要我们自己写一个配置类了。

image.png

2. 修改端口号

目前项目启动的默认端口号是8080, 这也是springBoot的一个特点,预设了很多默认值。当然如果我们想要修改可以可以的。修改端口号,需要我们在配置文件中进行指定。springBoot默认的配置文件名是application.properties ,我们也可以使用yml格式的配置文件,就是application.yml 这两种都可以,但是最好不要同时存在。配置文件生效的位置有很多。最常用的就是直接放到resources 目录下,其实就是我们的classPath下。

目前使用yml格式的比较多,我们也已yml格式的为例。 通过server.port 来修改端口号。

image.png

如果使用properties写法如下

image.png

注意二者区别。yml中通过 缩进来表达层级关系。 properties文件通过.来表达,用=赋值。

修改完之后,clean. package 启动,端口号就生效了。注意,二者尽量不要同时存在。如果非要同时存在,properties文件的优先级更高。

image.png 当然配置文件中其实不光是可以修改端口号的,很多配置都可以在这里修改。比如数据库的连接,一些变量的定义等。

3. 关于 @RestController

我们在开发Controller的时候,在类上用的是@RestController注解,这个注解如果大家用过springMvc的肯定了解,它就是 @ResponseBody 和 @Controller注解的混合。

image.png

代表这是一个Controller 并且以json的形式进行返回。由于目前主流的项目方式都是前后端发离的形式,后端只需负责返回接口数据即可,无需处理页面跳转等逻辑。所以后端的接口基本都使用@RestController返回数据即可。

也正是上面的原因,所以springBoot整合 jsp,整合 thymeleaf,整合 freemarker等技术,这里也都不讲了,因为用这个实在太少了。 前后端分离已成为主流。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux环境变量配置全攻略

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法。 下面所有例…

HTML-鼠标悬浮文案效果

文章目录 前言一、 hover属性实现二、title属性 简单实现总结 前言 有时候,我们浏览网站时,鼠标停留在某处后鼠标会提示一些文案。 一、 hover属性实现 HTML 中可以使用 CSS 来实现鼠标悬浮文案效果。 首先,在 HTML 文件中添加需要显示悬浮…

VS打开报错 未能正确加载 Microsoft Wswalstudio.editorImplementation.editorPackage”

VS 打开的时候报错: 未能正确加载 Microsoft Wswalstudio.editorImplementation.editorPackage” 此间题可能是由配查更改或安装另一个扩展导致的,可以通过查看文件 C:\Users\Administrator\AppData\Roaming\Microsoft\VisualStudio\11.0\ActivityLog.x…

AI客服发展现状与展望:期待技术进步带来更优质的服务体验

近年来,随着人工智能技术的飞速发展,越来越多的企业开始采用AI客服,以提高效率、降低成本。然而,一些用户反映AI客服存在回答不准确、难以理解个性化问题等问题,引发了对智能客服发展现状的关注。 在北京市民邹女士的…

js的防抖与节流

目录 认识防抖与节流防抖节流 手写防抖函数绑定this与参数取消功能立即执行获取返回值最终版 手写节流函数 认识防抖与节流 在JavaScript中,大量操作都会触发事件,这些事件又会被添加到事件队列中进行排队处理 某些事件如果频繁触发的话会对浏览器的性能…

服务器变矿机,该如何应对?

开始 恶意的挖矿程序会导致服务器cpu的异常占用&#xff0c;很让人讨厌。起初&#xff0c;我只是使用top命令显示出占用cpu不正常的进程&#xff0c;发现其中一个进程占用了百分之九十九点几&#xff0c;然后通过kill -9 <PID>命令干掉它。但总是过不了几天&#xff0c;…

Windows系统字体尺寸学习

调用GetTextMetrics来获得字体尺寸信息, 函数返回设备描述表中当前选定的字体信息&#xff1b; 返回值到TEXTMETRIC类型的结构中&#xff1b; 返回字段值的单位取决于当前设备描述表映射方式&#xff1b;默认映射方式是MM_TEXT&#xff0c;值的单位是像素&#xff1b; 前7个字…

【MATLAB源码-第113期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 POA&#xff08;孔雀优化算法&#xff09;是一种基于孔雀羽毛开屏行为启发的优化算法。这种算法模仿孔雀通过展开其色彩斑斓的尾羽来吸引雌性的自然行为。在算法中&#xff0c;每个孔雀代表一个潜在的解决方案&#xff0c;而…

CSS3弹性盒布局详解

CSS3的弹性盒布局 简介 弹性盒&#xff08; Flexible Box 或 Flexbox&#xff09; 布局是CSS3提供的一种新的布局模式&#xff0c;是一种当页面需要适应不同的屏幕大小及设备类型时&#xff0c;确保元素拥有恰当行为的一种布局方式。 弹性盒的结构: 从图中所知&#xff0c…

K8s(一)Pod资源——Pod介绍、创建Pod、Pod简单资源配额

目录 Pod概述 pod网络 pod存储 pod和容器对比 创建pod的方式 pod运行方式分类 Pod的创建 Pod的创建过程 通过kubectl run来创建pod 通过yaml文件创建&#xff0c;yaml文件简单写法 Pod简单操作 Pod的标签labels Pod的资源配额resource 测试 Pod概述 Kubernetes …

嵌入式学习-网络编程-Day4

思维导图 广播通信模型 #include <myhead.h> int main(int argc, char const *argv[]) {int rfd socket(AF_INET,SOCK_DGRAM,0);if(rfd-1){perror("socket error");return -1;}//填充地址信息结构体struct sockaddr_in rin;rin.sin_familyAF_INET;rin.sin_por…

[ceph] ceph应用

一、资源池 Pool 管理 #创建一个 Pool 资源池&#xff0c;其名字为 mypool&#xff0c;PGs 数量设置为 64&#xff0c;设置 PGs 的同时还需要设置 PGP&#xff08;通常PGs和PGP的值是相同的&#xff09;&#xff1a; PG (Placement Group)&#xff0c;pg 是一个虚拟的概念&…

基于变换域的模版匹配

模板匹配原理 图像的空间域与其他域之间的变换&#xff0c;如傅里叶变换&#xff0c;小波变换&#xff0c;轮廓波变换&#xff0c;剪切波变换等&#xff0c;实际上是图像在其他坐标领域中的表现。在空间域中&#xff0c;图像的信息是像素值和坐标位置&#xff1b;在其他域中&a…

交通流量预测HSTGCNT:Hierarchical Spatio–Temporal Graph Convolutional

Hierarchical Spatio–Temporal Graph Convolutional Networks and Transformer Network for Traffic Flow Forecasting 交通流预测的层次时空图卷积网络和Transformer网络 Abstract 图卷积网络&#xff08;GCN&#xff09;具有图形化描述道路网络不规则拓扑结构的能力&#…

【C语言】数据结构——排序三(归并与计数排序)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. 归并排序1.1 基本思想1.2 递归实现1.3 非递归实现 2. 计数排序2.1 基本思想2.2 代码实现 导读&#x…

如何用Python进行数据分析(保姆级教程)

有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了&#xff0c;比较复杂。 很多网上的资料都是从语法教起的&#xff0c;花了很多时间还是云里雾里&#xff0c;摸不清方向。今天就给大家来捋一捋思路&#xff01;帮助大家提高学习效率&#xff01; Pyt…

夜神安装Magisk及Delta(狐狸面具)教程

Magisk和LSPosed、EdXPosed下载 Magisk框架下载与安装教程 - 多开鸭Magisk及LSPosed在模拟器安装的详细视频教程 推荐先看一遍教程 视频教程 雷电模拟器版本教程&#xff1a;https://www.bilibili.com/video/BV1kv4y127af 夜神模拟https://www.duokaiya.com/magisk.html 夜神模…

JS遍历对象的方法及特点

1、定义一个对象 let obj {name: Tom,age: 20,sex: 男,};obj.weight 70kg;// obj的原型上定义属性Object.prototype.height 180cm;Object.prototype.major function() {console.log(专业&#xff1a;计算机应用技术);};console.log(obj, obj); 控制台输出的obj中&#xff…

C++make_pair,你真的懂了吗?

其实写这篇文章我还是很忐忑的&#xff0c;因为用C也写了快一年了&#xff0c;平时代码量个人认为还可以&#xff0c;但是最近两天频繁犯错&#xff0c;下面先说说我写的错误吧&#xff01; 我们都知道make_pair返回的是一个pair类型的函数&#xff0c;而pair这个键值对它又是…

go语言(一)----声明常量

package mainimport ("fmt""time" )func main() {fmt.Print("hello go!")time.Sleep(1 * time.Second)}运行后&#xff0c;结果如下&#xff1a; 1、golang表达式中&#xff0c;加&#xff1b;和不加&#xff1b;都可以 2、函数的{和函数名一…