当前位置: 首页 > article >正文

【JavaEE】Spring Boot项目创建

Spring Boot介绍

在学习Spring Boot之前,我们先来认识一下Spring

Spring官方是这样介绍的:

可以看到,Spring让Java程序更加快速,简单和安全。Spring对于速度,简单性和生产力的关注使其成为世界上最流行的Java框架

Spring官方为我们提供了很多开源的项目,覆盖范围从Web开发到大数据,Spring发展到了今天,已经形成了自己的生态圈。我们在开发时,也倾向于使用Spring官方提供的技术,来解决对应的问题

Spring开源项目:

我只能截到这么多,实际上还有很多。大家可以自行到https://spring.io/去看

这些项目都是基于Spring Framework来进行开发的,但是Spring Framework存在配置多,入门难的问题,Spring也意识到了这个问题,为了简化开发者的使用,从而创造性的推出了Spring Boot

接下来,我们看下什么是Spring Boot

Spring Boot的诞生,是为了简化Spring程序开发

Spring Boot翻译一下就是Spring 脚手架。那什么是脚手架呢?如下图所示:

盖房子的这个架子就是脚手架,脚手架的作用是砌筑砖墙,浇筑混凝土、方面墙面抹灰,装饰和粉刷的,简单来说,就是使用脚手架可以更快速的盖房子

而Spring Boot就是Spring框架的脚手架,它是为了快速开发Spring框架而诞生的

Spring Boot项目创建

使用IDEA创建

使用社区版需要额外安装插件,而且后续学习中,会发现社区版有很多限制。我们这里建议大家能够换成专业版IDEA,现在网络上有很多种破解专业版IDEA的方式。大家可以试一下

接下来,我们使用专业版IDEA创建Spring Boot项目

File->New->Project

点击Next,然后选择Spring Boot版本,并添加依赖

注意:

Spring Boot版本,选择任意3.x的,这个版本会随着Spring Boot的升级而发生变化,不固定。

3.x版本使用的是jdk17,3.x以下使用的是jdk8

这里我们想要添加什么依赖(框架,插件,组件等....后面再细讲),就打勾即可

然后点击Finish即可生成一个Spring Boot项目。如下图:

注意事项:

第一次打开Spring Boot项目需要加载很久,因为当前Spring Boot框架并没有在自己的本地仓库

为了加速Spring Boot项目的下载,在打开项目之前,请先确定自己的Maven已经配置为国内源

见:【JavaEE】Maven配置-CSDN博客

项目代码和目录介绍

观察pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.fei</groupId><artifactId>Spring_Boot_demo</artifactId><version>0.0.1-SNAPSHOT</version><name>Spring_Boot_demo</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

pom.xml文件里的具体信息,我们不需要过度关注。主要看<dependencies>标签里面的内容即可

在pom文件中,引入了两个依赖

·spring-boot-starter-web:包含了web应用开发所需要的常见依赖

·spring-boot-starter-test:包含了单元测试所需要的常见依赖

父工程

但是我们发现在上述我们添加依赖时,并没有指定具体的版本号,但我们的jar包也正常引入到项目中了。

但是如果查看的话,其实是有版本号的

我们再来看看本地仓库的jar包是否也下载下来了呢?

据图可知,本地仓库的jar包也下载了

那为什么没有指定版本,程序也可以正常运行呢?

因为每一个Spring Boot工程,都有一个父工程。依赖的版本号,在父工程中统一管理

父工程指定版本号后,就会自动引入和所指定版本对应的依赖,创建的Spring Boot项目,会继承Spring Boot父工程

在pom.xml中,找到父工程

进入父工程(spring-boot-starter-parent)中

查看依赖版本,进入spring-boot-dependencies中

目录介绍

Spring Boot项目有两个主要的目录:
·src/main/java:Java源代码

·src/main/resources:为静态资源或配置文件:
        ·/static:静态资源文件夹,比如学习的js、css、html等静态文件,不需要服务器数据进行绑定的页面

        ·/templates:模板资源文件夹,主要存放动态模板文件,比如JSP、Freemarker、Thymeleaf等需要服务器动态渲染数据的文件

·src/test/java:测试代码源代码

·target:编译后的文件路径

·pom.xml:maven配置文件

注意:在刚创建好Spring Boot项目时,有一些不必要的可以进行选择性删除。如上图的:.mvn//.gitattributes//HELP.md/mvnw/mvnw.cmd

运行项目

我们在学习Spring框架这里,记得 实践>>理论(我们先跟着上手操作,后续再讲解原因)

我们可以看到在SpringBootDemoApplication这个类上面有一串黄色代码 @SpringBootApplication

@SpringBootApplication:这是SpringBoot启动类注解

我们这里点击启动类的main方法就可以运行Spring Boot项目了,启动成功如下图:

有@SpringBootApplication注解的类即为启动类

@SpringBootApplication
public class SpringBootDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringBootDemoApplication.class, args);}
}

我们需要记住以下几点
1.启动类本身就是一个main方法,是Spring Boot应用的入口

2.代码需放在启动类包或其子包下。(不放的话,需要额外操作)

3.避免直接运行其他类的main方法(会破坏Spring的依赖管理)

输出Hello world

我们的【JavaEE进阶】专栏,更多是围绕着如何使用Java来进行Web开发

之前我们所讲的都是Java基础,是没办法直接和浏览器进行互动的。所以接下来我们要用SpringBoot来实现和浏览器及用户的交互

在创建的项目名包(com.fei.spring_boot_demo)路径下创建UserController文件。

也是为了保证代码放在启动类包或其子包下。

实现代码如下

package com.fei.spring_boot_demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("hello")public String hello(){return "Hello world";}
}

在我们写完代码后,每次都需要重新启动 启动类

重新启动项目,然后访问 http://127.0.0.1:8080/user/hello 最终效果如下:

我们这里先不纠结 原因。我们先敲代码。如果我们先学习理论知识,再去敲代码,不知道要学到猴年马月。

Web服务器

浏览器和服务器两端进行数据交互,使用的就是HTTP协议

HTTP协议是HTTP客户端和HTTP服务器之间的交互数据的格式

Web服务器就是对HTTP协议进行封装,程序员不需要直接对协议进行操作(自己写代码去解析http协议规则),让Web开发更加便捷,所以Web服务器也被称为WWW服务器。HTTP服务器,主要功能就是提供网上信息浏览服务

常见的Web服务器有:Apache,Nginx,IIS,Tomcat,Jboss等

Spring Boot内置了Tomcat服务器,无需配置即可直接运行

Tomcat默认端口号是8080,所以我们程序访问时的端口也是8080

请求响应流程分析

浏览器输入URL后,发起请求,就和服务器之间建立了连接

浏览器:

·输入网址:http://127.0.0.1:8080/user/hello

·通过IP地址127.0.0.1定位到网络上的一台计算机,127.0.0.1就是本机

·通过端口号8080找到计算机上对应的进程,也就是在本地计算机中找到正在运行的8080端口的程序

·/user/hello是请求资源位置

·资源:对计算机而言,资源就是数据

·Web资源:通过网络可以访问到的资源(通常是指存放在服务器上的数据)

http://127.0.0.1:8080/user/hello,就是向本地计算机中的8080端口程序,获取资源位置是user/hello的数据

8080端口程序,在服务器找/hello位置的资源数据,发给浏览器

服务器:

·接收到浏览器发送的信息(如:/user/hello)

·在服务器上找到/user/hello的资源

·把资源发送给浏览器

常见报错

访问出错怎么办

404

404表示用户访问的资源不存在。大概率是URL的路径写的不正确

错误实例1:url单词拼错

错误实例2:注解写错

@RequestMapping("/user")
@Controller //把RestController写成了Controller
public class UserController {@RequestMapping("hello")public String hello(){return "Hello world";}
}

这时候访问时,也会报错404

通过Fiddler观察HTTP请求

500

服务器内部出现错误。一般是服务器的代码在执行过程中遇到了一些特殊情况(如服务器异常崩溃)就会产生500状态码

错误实例:

@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("hello")public String hello(){int res=10/0;return "Hello world";}
}

重启Tomcat服务器,然后重新访问页面,我们可以看到:

并且,此时程序后端控制台也打印了具体的异常调用栈

异常信息里已经提示了:出现异常的代码是UserController.java的第12行

错误原因:算术异常-->除数为0

我们只需要按照异常提示,去解决对应的问题即可

无法访问此网站

一般是Tomcat启动失败了

这种情况一般是服务未成功启动,也就是tomcaat未启动,或者IP/端口写错

打开Fiddler的话(我的Edge浏览器也是),页面如下:

小结

最开始学习Spring的时候,会遇到很多问题,更多是环境相关的问题

我们不仅要学习Spring代码的基本写法,更重要的是学习排查错误的思路

程序员调试BUG如同医生诊病

一个有经验的程序员和一个新手程序员相比,最大的优势往往不是代码写的多好,而是调试效率有多高。同一个问题可能新手花了几天都无法解决的,但是有经验的程序员可能几分钟就搞定了

熟悉HTTP协议能让我们调试问题事半功倍

·4xx状态码表示路径不存在,往往需要检查URL是否正确,和代码中设定的Context Path以及Servlet Path是否一致

·5xx的状态码表示服务器出现错误,往往需要观察页面提示的内容和Tomcat自身的日志,观察是否存在报错

·出现连接失败往往意味着服务没有正确启动,也需要观察 服务的自身日志是否有错误提示

观察日志是调试程序的重要途径。系统日志往往很多,需要同学们耐心阅读,经常阅读,熟练了就能更快速的找到问题了

Spring Boot是为了快速开发Spring而诞生的,Spring Boot具备

·Spring Boot提供了启动添加依赖的功能,可以快速集成框架;

·内置Web服务器,无需配置Tomcat等Web服务器,直接运行和部署程序

·可以完全抛弃繁琐的XML,使用注解和配置的方式进行开发

·支持更多的监控的指标,可以更好的了解项目的运行情况等特点

Spring Boot可使用IDEA或网页创建,它的设计思想是约定大于配置,类上标注@SpringBootApplication就可以启动Spring Boot项目了

相关文章:

【JavaEE】Spring Boot项目创建

Spring Boot介绍 在学习Spring Boot之前&#xff0c;我们先来认识一下Spring Spring官方是这样介绍的&#xff1a; 可以看到&#xff0c;Spring让Java程序更加快速&#xff0c;简单和安全。Spring对于速度&#xff0c;简单性和生产力的关注使其成为世界上最流行的Java框架 Sp…...

KAG与RAG在医疗人工智能系统中的多维对比分析

1、引言 随着人工智能技术的迅猛发展,大型语言模型(LLM)凭借其卓越的生成能力在医疗健康领域展现出巨大潜力。然而,这些模型在面对专业性、时效性和准确性要求极高的医疗场景时,往往面临知识更新受限、事实准确性不足以及幻觉问题等挑战。为解决这些问题,检索增强生成(…...

车牌识别技术解决方案

在城市化进程不断加速的背景下&#xff0c;小区及商业区域的车辆管理问题日益凸显。为解决这一问题&#xff0c;车牌识别技术应运而生&#xff0c;成为提升车辆管理效率与安全性的关键手段。本方案旨在详细介绍车牌识别系统的基本原理、功能设计、实施流程以及预期效益&#xf…...

C/C++ 面试复习笔记(4)

1.在多线程的 Linux 程序中&#xff0c;调用系统函数&#xff08;如pthread_create 创建线程、pthread_mutex_lock 锁定互斥锁等&#xff09;可能会返回错误码。 与单线程环境相比&#xff0c;多线程环境下的错误处理有哪些需要特别注意的地方&#xff1f;请举例说明如何在多线…...

Unity 大型手游碰撞性能优化指南

Unity 大型手游碰撞性能优化指南 版本: 2.1 作者: Unity性能优化团队 语言: 中文 前言 在Unity大型手游的开发征途中,碰撞检测如同一位隐形的舞者,它在游戏的物理世界中赋予物体交互的灵魂。然而,当这位舞者的舞步变得繁复冗余时,便会悄然消耗宝贵的计算资源,导致帧率下…...

Git仓库的创建

Git服务器准备 假设Git所在服务器为Ubuntu系统&#xff0c;IP地址10.17.1.5。 一. 准备运行git服务的git用户&#xff0c;这里用户名就直接设定为git。 1. 创建一个git用户组&#xff0c;并创建git用户。 sudo groupadd git sudo useradd git -g git 2. 创建git用户目录&…...

从零到一:Maven 快速入门教程

目录 Maven 简介Maven 是什么为什么使用 Maven&#xff1f; 安装 Maven下载 Maven 配置 Maven解压文件配置本地仓库保存路径配置国内仓库地址 Maven 的核心概念了解 pom.xml 文件坐标依赖范围生命周期compileprovidedruntimetestsystemimport 依赖传递依赖排除依赖循环 继承1. …...

DDD架构实战 领域层 事件驱动

目录 核心实现&#xff1a; 这种实现方式的优势&#xff1a; 在实际项目中&#xff0c;你可能需要&#xff1a; 事件驱动往往是在一个微服务内部实现的 领域时间是DDD架构中比较常见的概念 在领域层内部的一个模型更改了状态或者发生了一些行为 向外发送一些通知 这些通…...

c# List<string>.Add(s) 报错:UnsupportedOperationException

在使用c#读取目录下指定格式文件目录后&#xff0c;使用List<string>.Add 来保存文件名时&#xff0c;出现UnsupportedOperationException错误&#xff0c;找了好久不知道问题出在哪里。 以下是错误代码&#xff1a; using (var fbd new FolderBrowserDialog{Descripti…...

postman基础

前言 本次 Chat 将结合业界广为推崇和使用的 RestAPI 设计典范 Github API&#xff0c;详细介绍 Postman 接口测试工具的使用方法和实战技巧。 在开始这个教程之前&#xff0c;先聊一下为什么接口测试在现软件行业如此重要&#xff1f; 为什么我们要学习 Postman&#xff1f;…...

python训练营day45

知识点回顾&#xff1a; tensorboard的发展历史和原理tensorboard的常见操作tensorboard在cifar上的实战&#xff1a;MLP和CNN模型 效果展示如下&#xff0c;很适合拿去组会汇报撑页数&#xff1a; 作业&#xff1a;对resnet18在cifar10上采用微调策略下&#xff0c;用tensorbo…...

B+树知识点总结

核心目标&#xff1a;减少磁盘 I/O 数据库系统&#xff08;如 MySQL&#xff09;的主要性能瓶颈通常在于磁盘 I/O&#xff08;读取和写入数据到物理硬盘的速度远慢于内存访问&#xff09;。B 树的设计核心就是最大限度地减少访问数据时所需的磁盘 I/O 次数。 一、B 树的基本结…...

Halcon透视矩阵

在 Halcon中&#xff0c;透视变换矩阵用于将图像从一个视角转换到另一个视角&#xff0c;常用于图像校正和几何变换。以下是计算透视变换矩阵的步骤及代码示例。 透视形变图像校正的步骤 对图像左简单的处理&#xff0c;分割要校正的区域&#xff1b;提取区域的顶点坐标信息&…...

SpringCloud——OpenFeign

概述&#xff1a; OpenFeign是基于Spring的声明式调用的HTTP客户端&#xff0c;大大简化了编写Web服务客户端的过程&#xff0c;用于快速构建http请求调用其他服务模块。同时也是spring cloud默认选择的服务通信工具。 使用方法&#xff1a; RestTemplate手动构建: // 带查询…...

007-nlohmann/json 项目应用-C++开源库108杰

本课为 fswatch&#xff08;第一“杰”&#xff09;的示例项目加上对配置文件读取的支持&#xff0c;同时借助 第三“杰” CLI11 的支持&#xff0c;完美实现命令行参数与配置文件的逻辑统一。 012-nlohmann/json-4-项目应用 项目基于原有的 CMake 项目 HelloFSWatch 修改。 C…...

移动端测试岗位高频面试题及解析

文章目录 一、基础概念二、自动化测试三、性能测试四、专项测试五、安全与稳定性六、高级场景七、实战难题八、其他面题 一、基础概念 移动端测试与Web测试的核心区别&#xff1f; 解析&#xff1a;网络波动&#xff08;弱网测试&#xff09;、设备碎片化&#xff08;机型适配&…...

gvim比较两个文件不同并合并差异

使用 gvim 比较两个文件的不同&#xff1a; 方式一&#xff0c;使用 gvim 同时打开两个待比较的文件。 比较通用方式是采用 gvim -d 选项&#xff0c;具体命令&#xff0c;如下&#xff1a; gvim -d <file1> <file2>方式二&#xff0c;先用 gvim 打开一个文件&am…...

App使用webview套壳引入h5(二)—— app内访问h5,顶部被手机顶部菜单遮挡问题,保留顶部安全距离

引入webview的页面添加safeAreaInsets&#xff0c;对weview的webviewStyles做处理 在myApp中改造 entry.vue代码如下 template><view class"entry-page" :style"{ paddingTop: safeAreaInsets.top px }"><web-view :webview-styles"we…...

Git GitHub Gitee

一、Git 是一个免费、开源的分布式版本控制系统。 版本控制&#xff1a;一种记录文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。它最重要的就是可以记录文件修改历史记录&#xff0c;从而让用户可以看历史版本&#xff0c;方便版本切换。 1.和集中式版本控制…...

《深度体验 Egg.js:打造企业级 Node.js 应用的全景指南》

&#x1f680; 核心亮点&#xff1a;Koa 的二次觉醒 企业级基因&#xff1a;阿里多年双十一验证的框架稳定性插件化架构&#xff1a;config.plugins 实现功能模块即插即用渐进式演进&#xff1a;从 50 行代码到 5 万行代码的无缝扩容能力 &#x1f527; 实战配置解析&#xff…...

蓝桥杯2118 排列字母

问题描述 小蓝要把一个字符串中的字母按其在字母表中的顺序排列。 例如&#xff0c;LANQIAO 排列后为 AAILNOQ。 又如&#xff0c;GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPSTUUYYY。 请问对于以下字符串&#xff0c;排列之后字符串是什么&#xff1f; WHERETHEREIS…...

Python应用break初解

大家好!作为 Python 初学者&#xff0c;控制循环的执行是编程中的基础技能之一。在本文中&#xff0c;我们将深入探讨break语句的用途和用法&#xff0c;帮助您更好地理解和掌握这一强大的工具。 定义: break是 Python 中的一个保留关键字&#xff0c;用于在循环中提前终止循环…...

PLSQLDeveloper配置OracleInstantClient连接Oracle数据库

PL/SQLDeveloper配置Oracle Instant Client连接Oracle数据库 文章目录 PL/SQLDeveloper配置Oracle Instant Client连接Oracle数据库 1. Oracle Instant Client下载与配置1. Oracle Instant Client下载2. Oracle Instant Client解压配置1. 解压2. 配置 2. PL/SQL Developer下载、…...

高股息打底+政策催化增强+永续经营兜底

通过分析农业银行&#xff08;政策红利高股息&#xff09;与长江电力&#xff08;垄断资源现金流堡垒&#xff09;的共性&#xff0c;提炼出以下策略框架&#xff1a; ​​1. 核心筛选标准​​ • 高股息防御性&#xff1a;股息率>3%&#xff0c;分红率稳定&#xff08;40%…...

双电机差速控制的MATLAB Simulink仿真方案,使用PWM和PID调节实现360°转向与速度控制_可复现,有问题请联系博主

以下是一个双电机差速控制的MATLAB Simulink仿真方案,使用PWM和PID调节实现360转向与速度控制。方案包含系统建模、控制策略和仿真实现。 系统模型 差速运动学模型: 线速度 ( v = \frac{v_r + v_l}{2} )角速度 ( \omega = \frac{v_r - v_l}{d} )其中 ( v_r, v_l ) 为右/左轮线…...

【Oracle】触发器

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 触发器基础概述1.1 触发器的概念与特点1.2 触发器的分类1.3 触发器的执行顺序 2. DML触发器2.1 基础DML触发器2.1.1 INSERT触发器2.1.2 UPDATE触发器2.1.3 DELETE触发器 2.2 高级DML触发器2.2.1 复合触发器2…...

基于深度学习的无人机轨迹预测

完整代码见文末 随着无人机技术的不断发展&#xff0c;无人机在农业、物流、监控等领域的应用日益广泛。精准的轨迹预测不仅能够提高无人机飞行的效率和安全性&#xff0c;还能在应对复杂环境下的突发状况时做出迅速反应。因此&#xff0c;基于深度学习的无人机轨迹预测已成为…...

git连接本地仓库以及gitee

参考:gitee创建新仓库并上传代码_gitee新建仓库导入代码-CSDN博客 git初始化以及添加git分支 在idea查看master主分支 报错 原因gitee推送更新失败问题记录&#xff1a;remote: error: hook declined to update refs/heads/master-CSDN博客 取消邮箱暴露...

使用Python和OpenCV实现图像识别与目标检测

在计算机视觉领域&#xff0c;图像识别和目标检测是两个非常重要的任务。图像识别是指识别图像中的内容&#xff0c;例如判断一张图片中是否包含某个特定物体&#xff1b;目标检测则是在图像中定位并识别多个物体的位置和类别。OpenCV是一个功能强大的开源计算机视觉库&#xf…...

麒麟v10系统的docker重大问题解决-不支持容器名称解析

今天给客户在麒麟v10Kylin-Server-V10-SP1下安装nextcloudonlyoffice的时候出现无法连接onlyoffice的问题,经过分析找到了是docker版本过低的原因,现在把解决思路和步骤分享给大家。 一、问题 用一键安装工具,给客户装好了系统,Nextcloud可以正常访问 但是访问nextcloud中的o…...