【JavaEE05-后端部分】使用idea社区版从零开始创建第一个 SpringBoot 程序

Spring是一个高级框架,越高级用起来越简单。

Spring 在不同场景下有两个语义:

  1. 第一个Spring Framework
  2. 第二个Spring家族

SpringBoot的诞生是为了简化Spring的开发,Spring Boot翻译一下就是spring脚手架。


SpringBoot项目的创建

使用官网的创建方式

Spring官网

1)快速启动


2)点击进入


3)配置选项


4)添加依赖


5)生成代码,最后使用idea打开项目


使用idea社区版开发工具的创建SpringBoot项目

正常情况下,社区版的idea不支持创建SpringBoot项目的,我们的idea专业版是支持创建SpringBoot项目的。

那么我们如何使用社区版创建SpringBoot项目呢?

需要装一个SpringBoot插件:SpringBoot Help,但是注意想要免费装配需要对idea社区版本有要求。

  • 要求:idea社区版本2021.1~2022.1.4【硬性要求】,只有这个范围内的版本才可以装插件

因为我们⽤的Idea社区版,所以先要安装SpringBoot Helper插件才能创建

SpringBoot项⽬。

安装SpringBoot Help插件【如果你使⽤的是专业版Idea,那么不需要安装插件,Idea已经集成了】。

插件地址:SpringBoot Helper插件
安装插件

1)然后点击下载


2)下载压缩包【直接下载,不要解压,不要解压】

再次强调,不要解压,更不要解压之后再压缩


3)在idea中安装插件:file->settings->plugins->设置图标

选择从本地磁盘安装

选择你下载的压缩包,点击ok,然后重启idea


4)file->new->project如果出现以下的Spring Initializer,就说明安装成功了


创建SpringBoot项目

1)file->new->project->Spring Initializer 选择JDK 点击next


2)填写对应的信息


3)选择SpringBoot版本,然后再选择对应的依赖,最后再下一步


4)注意项目名称和你的路径最后一个目录名要一致,因为项目名称也只是一个目录名【或者说项目只是仓库,后面的模块才是真正的项目】,点击next


5)然后此时如果你的项目没有通过maven将依赖包加载进来,那么你就得手动添加为maven项目:点击pom.xml文件右键选择add as maven project添加为maven项目


6)然后我们的社区版会有一个坑:就是需要你将.RELEASE给手动删掉

删除完毕之后刷新一下,此时只需要静静等待我们的maven为我们下载对应的依赖包就行了


7)注意,那么如果你的pom.xml文件还是爆红的话,那么此时应该是SpringBoot的版本问题,当然你也可以不用改,如果改的话我们建议将版本改为3.2.2,注意修改之后要刷新

版本号 类型 适用场景 最低 JDK 要求
3.2.2 最新稳定版 新项目开发(推荐) JDK17+
2.7.18 LTS 长期支持版 企业级项目(稳定维护至 2025) JDK8/11/17

常见问题:

包下载不下来,我们怎么解决呢?

  1. 重新刷新maven

  2. 看一下是全部没有下载下来还是部分没下载下来。如果是全部没下载下来就多次刷新;如果是部分没下载下来,那么还是多次刷新重新下载

  3. 如果刷新很多次还是下载不下来的话,那么我们就去删除本地仓库,然后再刷新重新下载,比如我我们的spring-boot-maven-plugin

    然后再次刷新

  4. 那么如果上述这样还是不行的话,那么此时我们就加版本号 ,版本好和你的SpringBoot一致就行了,加上之后他就不会报红了


版本管理

  • SNAPSHOT是快照版,是非稳定版,可以修改的,可以理解为是开发版本,就是我们在开发的时候可以是使用这个,但是我们上线之后我们就不用这个版本了。
  • 其他版本是稳定版,发布之后就不能修改了,哪怕有bug也不能修改,只能通过版本升级的方式修复。

版本

0.0.1-SNAPSHOT

0[第一位].0[第二位].1[第三位]-SNAPSHOT

版本通常有3位数字组成,我们称之为大中小版本。

  • 第一位:大版本【用于非常大的改动】
  • 第二位:中版本【比较一般的改动,新增小的功能】
  • 第三位:小版本【修复bug,新增非常非常小的功能】

为什么依赖中没有版本号?这个版本是谁管理的?

xml 复制代码
<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

我们按住Ctrl键会显示对应的版本号,那么请问:这些版本号是谁管理的?

管理这些版本号的是:spring-boot-starter-parent

我们按住Ctrl键点进去会看到版本管理

再使用Ctrl键点进去,你会看到以下的版本管理:

xml 复制代码
 <properties>
    <activemq.version>6.1.8</activemq.version>
    <angus-mail.version>2.0.5</angus-mail.version>
    <artemis.version>2.40.0</artemis.version>
    <aspectj.version>1.9.25.1</aspectj.version>
    <assertj.version>3.27.6</assertj.version>
    <awaitility.version>4.2.2</awaitility.version>
    <zipkin-reporter.version>3.5.1</zipkin-reporter.version>
    <brave.version>6.1.0</brave.version>
    <build-helper-maven-plugin.version>3.6.1</build-helper-maven-plugin.version>
    <byte-buddy.version>1.17.8</byte-buddy.version>
    <cache2k.version>2.6.1.Final</cache2k.version>
    <caffeine.version>3.2.3</caffeine.version>
    <cassandra-driver.version>4.19.2</cassandra-driver.version>
    <classmate.version>1.7.3</classmate.version>
    <commons-codec.version>1.18.0</commons-codec.version>
    <commons-dbcp2.version>2.13.0</commons-dbcp2.version>
    <commons-lang3.version>3.17.0</commons-lang3.version>
    <commons-pool.version>1.6</commons-pool.version>
    <commons-pool2.version>2.12.1</commons-pool2.version>
    <couchbase-client.version>3.8.3</couchbase-client.version>
    <crac.version>1.5.0</crac.version>
    <cyclonedx-maven-plugin.version>2.9.1</cyclonedx-maven-plugin.version>
    <db2-jdbc.version>12.1.3.0</db2-jdbc.version>
    <dependency-management-plugin.version>1.1.7</dependency-management-plugin.version>
    <derby.version>10.16.1.1</derby.version>
    <ehcache3.version>3.10.9</ehcache3.version>
    <elasticsearch-client.version>8.18.8</elasticsearch-client.version>
    <flyway.version>11.7.2</flyway.version>
    <freemarker.version>2.3.34</freemarker.version>
    <git-commit-id-maven-plugin.version>9.0.2</git-commit-id-maven-plugin.version>
    <glassfish-jaxb.version>4.0.6</glassfish-jaxb.version>
    <glassfish-jstl.version>3.0.1</glassfish-jstl.version>
    <graphql-java.version>24.3</graphql-java.version>
    <groovy.version>4.0.29</groovy.version>
    <gson.version>2.13.2</gson.version>
    <h2.version>2.3.232</h2.version>
    <hamcrest.version>3.0</hamcrest.version>
    <hazelcast.version>5.5.0</hazelcast.version>
    <hibernate.version>6.6.41.Final</hibernate.version>
    <hibernate-validator.version>8.0.3.Final</hibernate-validator.version>
    <hikaricp.version>6.3.3</hikaricp.version>
    <hsqldb.version>2.7.3</hsqldb.version>
    <htmlunit.version>4.11.1</htmlunit.version>
    <httpasyncclient.version>4.1.5</httpasyncclient.version>
    <httpclient5.version>5.5.2</httpclient5.version>
    <httpcore.version>4.4.16</httpcore.version>
    <httpcore5.version>5.3.6</httpcore5.version>
    <infinispan.version>15.2.6.Final</infinispan.version>
    <influxdb-java.version>2.25</influxdb-java.version>
    <jackson-bom.version>2.19.4</jackson-bom.version>
    <jakarta-activation.version>2.1.4</jakarta-activation.version>
    <jakarta-annotation.version>2.1.1</jakarta-annotation.version>
    <jakarta-inject.version>2.0.1</jakarta-inject.version>
    <jakarta-jms.version>3.1.0</jakarta-jms.version>
    <jakarta-json.version>2.1.3</jakarta-json.version>
    <jakarta-json-bind.version>3.0.1</jakarta-json-bind.version>
    <jakarta-mail.version>2.1.5</jakarta-mail.version>
    <jakarta-management.version>1.1.4</jakarta-management.version>
    <jakarta-persistence.version>3.1.0</jakarta-persistence.version>
    <jakarta-servlet.version>6.0.0</jakarta-servlet.version>
    <jakarta-servlet-jsp-jstl.version>3.0.2</jakarta-servlet-jsp-jstl.version>
    <jakarta-transaction.version>2.0.1</jakarta-transaction.version>
    <jakarta-validation.version>3.0.2</jakarta-validation.version>
    <jakarta-websocket.version>2.1.1</jakarta-websocket.version>
    <jakarta-ws-rs.version>3.1.0</jakarta-ws-rs.version>
    <jakarta-xml-bind.version>4.0.4</jakarta-xml-bind.version>
    <jakarta-xml-soap.version>3.0.2</jakarta-xml-soap.version>
    <jakarta-xml-ws.version>4.0.2</jakarta-xml-ws.version>
    <janino.version>3.1.12</janino.version>
    <javax-cache.version>1.1.1</javax-cache.version>
    <javax-money.version>1.1</javax-money.version>
    <jaxen.version>2.0.0</jaxen.version>
    <jaybird.version>6.0.3</jaybird.version>
    <jboss-logging.version>3.6.1.Final</jboss-logging.version>
    <jdom2.version>2.0.6.1</jdom2.version>
    <jedis.version>6.0.0</jedis.version>
    <jersey.version>3.1.11</jersey.version>
    <jetty-reactive-httpclient.version>4.0.13</jetty-reactive-httpclient.version>
    <jetty.version>12.0.31</jetty.version>
    <jmustache.version>1.16</jmustache.version>
    <jooq.version>3.19.29</jooq.version>
    <json-path.version>2.9.0</json-path.version>
    <json-smart.version>2.5.2</json-smart.version>
    <jsonassert.version>1.5.3</jsonassert.version>
    <jtds.version>1.3.1</jtds.version>
    <junit.version>4.13.2</junit.version>
    <junit-jupiter.version>5.12.2</junit-jupiter.version>
    <kafka.version>3.9.1</kafka.version>
    <kotlin.version>1.9.25</kotlin.version>
    <kotlin-coroutines.version>1.8.1</kotlin-coroutines.version>
    <kotlin-serialization.version>1.6.3</kotlin-serialization.version>
    <lettuce.version>6.6.0.RELEASE</lettuce.version>
    <liquibase.version>4.31.1</liquibase.version>
    <log4j2.version>2.24.3</log4j2.version>
    <logback.version>1.5.25</logback.version>
    <lombok.version>1.18.42</lombok.version>
    <mariadb.version>3.5.7</mariadb.version>
    <maven-antrun-plugin.version>3.1.0</maven-antrun-plugin.version>
    <maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
    <maven-clean-plugin.version>3.4.1</maven-clean-plugin.version>
    <maven-compiler-plugin.version>3.14.1</maven-compiler-plugin.version>
    <maven-dependency-plugin.version>3.8.1</maven-dependency-plugin.version>
    <maven-deploy-plugin.version>3.1.4</maven-deploy-plugin.version>
    <maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
    <maven-failsafe-plugin.version>3.5.4</maven-failsafe-plugin.version>
    <maven-help-plugin.version>3.5.1</maven-help-plugin.version>
    <maven-install-plugin.version>3.1.4</maven-install-plugin.version>
    <maven-invoker-plugin.version>3.9.1</maven-invoker-plugin.version>
    <maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
    <maven-javadoc-plugin.version>3.11.3</maven-javadoc-plugin.version>
    <maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
    <maven-shade-plugin.version>3.6.1</maven-shade-plugin.version>
    <maven-source-plugin.version>3.3.1</maven-source-plugin.version>
    <maven-surefire-plugin.version>3.5.4</maven-surefire-plugin.version>
    <maven-war-plugin.version>3.4.0</maven-war-plugin.version>
    <micrometer.version>1.15.8</micrometer.version>
    <micrometer-tracing.version>1.5.8</micrometer-tracing.version>
    <mockito.version>5.17.0</mockito.version>
    <mongodb.version>5.5.2</mongodb.version>
    <mssql-jdbc.version>12.10.2.jre11</mssql-jdbc.version>
    <mysql.version>9.5.0</mysql.version>
    <native-build-tools-plugin.version>0.10.6</native-build-tools-plugin.version>
    <nekohtml.version>1.9.22</nekohtml.version>
    <neo4j-java-driver.version>5.28.10</neo4j-java-driver.version>
    <netty.version>4.1.130.Final</netty.version>
    <opentelemetry.version>1.49.0</opentelemetry.version>
    <oracle-database.version>23.7.0.25.01</oracle-database.version>
    <oracle-r2dbc.version>1.3.0</oracle-r2dbc.version>
    <pooled-jms.version>3.1.9</pooled-jms.version>
    <postgresql.version>42.7.9</postgresql.version>
    <prometheus-client.version>1.3.10</prometheus-client.version>
    <prometheus-simpleclient.version>0.16.0</prometheus-simpleclient.version>
    <pulsar.version>4.0.8</pulsar.version>
    <pulsar-reactive.version>0.6.0</pulsar-reactive.version>
    <quartz.version>2.5.2</quartz.version>
    <querydsl.version>5.1.0</querydsl.version>
    <r2dbc-h2.version>1.0.1.RELEASE</r2dbc-h2.version>
    <r2dbc-mariadb.version>1.3.0</r2dbc-mariadb.version>
    <r2dbc-mssql.version>1.0.4.RELEASE</r2dbc-mssql.version>
    <r2dbc-mysql.version>1.4.1</r2dbc-mysql.version>
    <r2dbc-pool.version>1.0.2.RELEASE</r2dbc-pool.version>
    <r2dbc-postgresql.version>1.0.9.RELEASE</r2dbc-postgresql.version>
    <r2dbc-proxy.version>1.1.6.RELEASE</r2dbc-proxy.version>
    <r2dbc-spi.version>1.0.0.RELEASE</r2dbc-spi.version>
    <rabbit-amqp-client.version>5.25.0</rabbit-amqp-client.version>
    <rabbit-stream-client.version>0.23.0</rabbit-stream-client.version>
    <reactive-streams.version>1.0.4</reactive-streams.version>
    <reactor-bom.version>2024.0.14</reactor-bom.version>
    <rest-assured.version>5.5.7</rest-assured.version>
    <rsocket.version>1.1.5</rsocket.version>
    <rxjava3.version>3.1.12</rxjava3.version>
    <saaj-impl.version>3.0.4</saaj-impl.version>
    <selenium.version>4.31.0</selenium.version>
    <selenium-htmlunit.version>4.30.0</selenium-htmlunit.version>
    <sendgrid.version>4.10.3</sendgrid.version>
    <slf4j.version>2.0.17</slf4j.version>
    <snakeyaml.version>2.4</snakeyaml.version>
    <spring-amqp.version>3.2.9</spring-amqp.version>
    <spring-authorization-server.version>1.5.5</spring-authorization-server.version>
    <spring-batch.version>5.2.4</spring-batch.version>
    <spring-data-bom.version>2025.0.8</spring-data-bom.version>
    <spring-framework.version>6.2.15</spring-framework.version>
    <spring-graphql.version>1.4.4</spring-graphql.version>
    <spring-hateoas.version>2.5.1</spring-hateoas.version>
    <spring-integration.version>6.5.6</spring-integration.version>
    <spring-kafka.version>3.3.12</spring-kafka.version>
    <spring-ldap.version>3.3.5</spring-ldap.version>
    <spring-pulsar.version>1.2.14</spring-pulsar.version>
    <spring-restdocs.version>3.0.5</spring-restdocs.version>
    <spring-retry.version>2.0.12</spring-retry.version>
    <spring-security.version>6.5.7</spring-security.version>
    <spring-session.version>3.5.4</spring-session.version>
    <spring-ws.version>4.1.2</spring-ws.version>
    <sqlite-jdbc.version>3.49.1.0</sqlite-jdbc.version>
    <testcontainers.version>1.21.4</testcontainers.version>
    <testcontainers-redis-module.version>2.2.4</testcontainers-redis-module.version>
    <thymeleaf.version>3.1.3.RELEASE</thymeleaf.version>
    <thymeleaf-extras-data-attribute.version>2.0.1</thymeleaf-extras-data-attribute.version>
    <thymeleaf-extras-springsecurity.version>3.1.3.RELEASE</thymeleaf-extras-springsecurity.version>
    <thymeleaf-layout-dialect.version>3.4.0</thymeleaf-layout-dialect.version>
    <tomcat.version>10.1.50</tomcat.version>
    <unboundid-ldapsdk.version>7.0.4</unboundid-ldapsdk.version>
    <undertow.version>2.3.22.Final</undertow.version>
    <versions-maven-plugin.version>2.18.0</versions-maven-plugin.version>
    <vibur.version>26.0</vibur.version>
    <webjars-locator-core.version>0.59</webjars-locator-core.version>
    <webjars-locator-lite.version>1.1.3</webjars-locator-lite.version>
    <wsdl4j.version>1.6.3</wsdl4j.version>
    <xml-maven-plugin.version>1.1.0</xml-maven-plugin.version>
    <xmlunit2.version>2.10.4</xmlunit2.version>
    <yasson.version>3.0.4</yasson.version>
  </properties>

这就是为什么我们没有指定版本但是他有版本的原因,所以我们说使用maven的话会出现版本冲突问题,而现在我们使用Spring的话,他就会为我们管理这件事情,从而解决版本冲突问题了。


代码相关解释

删除不相关的文件


最终我们有用的文件或者目录是:srcpom.xml ,【当然如果有必要git的话就留一下.gitignore文件】,再强调一下,只有srcpom文件有用,接下来我们就分别介绍这两个


pom文件
xml 复制代码
<?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.5.10</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.zhongge</groupId>
	<artifactId>springboot-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot-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.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>3.5.10</version>
			</plugin>
		</plugins>
	</build>

</project>

以下是我们的XML的声明,不用管,他会自动生成

xml 复制代码
<?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">

</project>

以下是项目的版本号

xml 复制代码
<modelVersion>4.0.0</modelVersion>

以下是我们的SpringBoot版本号,版本号是可以修改的

xml 复制代码
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.5.10</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

以下是项目信息:组织ID,项目ID,项目版本,项目名称,项目描述

xml 复制代码
	<groupId>com.zhongge</groupId>
	<artifactId>springboot-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot-demo</name>
	<description>Demo project for Spring Boot</description>

以下是从SpringBoot 3.3.1版本开始添加的部分,这部分主要是声明版权、开发人员、链接等等信息,他们是没有用的,可以直接删除

xml 复制代码
	<url/>
	<licenses><!--版权-->
		<license/>
	</licenses>
	<developers><!--开发人员-->
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>

以下是JDK的版本

xml 复制代码
<properties>
	<java.version>17</java.version>
</properties>

以下是咱们的依赖,多个依赖放在dependencies中,每个依赖放在dependency中

xml 复制代码
	<dependencies>
		<!--进行web开发的依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--单元测试的依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

以下是项目的打包方式

xml 复制代码
	<build>
		<plugins><!--插件-->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>3.5.10</version>
			</plugin>
		</plugins>
	</build>
src目录

2个目录


test目录下


main目录下

对比如下

目录 存放文件 是否编译 输出位置 核心特点
src/main/java .java 源代码 是(编译为.class) target/classes/ 对应包目录 包名和目录层级强绑定
src/main/resources 各类资源文件 否(原文件复制) target/classes/ 原目录结构 自定义目录结构,运行时直接读取

java目录示例结构

text 复制代码
src/main/java/
├── com/
│   └── example/
│       ├── controller/    # 控制器类
│       ├── service/       # 业务逻辑类
│       ├── dao/          # 数据访问层
│       ├── model/        # 实体类
│       ├── config/       # 配置类
│       └── Application.java  # 主启动类

resources目录示例结构

text 复制代码
src/main/resources/
├── application.yml              # 主配置文件
├── static/                     # 静态资源
│   ├── css/
│   ├── js/
│   └── images/
├── templates/                  # 模板文件
│   └── index.html
├── mapper/                    # MyBatis映射文件
│   └── UserMapper.xml
├── i18n/                      # 国际化
│   └── messages.properties
└── logback-spring.xml         # 日志配置

启动类


第一个SpringBoot程序

在咱们的包下建一个HelloController类,写完之后我们就重新启动类

java 复制代码
package com.zhongge.demo;

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

/**
 * @ClassName HelloController
 * @Description TODO 第一个SpringBoot程序
 * @Author 笨忠
 * @Date 2026-02-03 10:13
 * @Version 1.0
 */
@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello() {
        return "hello spring boot";
    }
}

然后通过浏览器访问我们的服务:http://127.0.0.1:8080/hello


路径解释

http://127.0.0.1:8080/hello路径是怎么来的?

我们的URL是:协议+域名[ip+端口号]+资源路径+查询字符串

  • IP:127.0.0.1是本机
  • 端口号port:8080是我们tomcat

一个进程可以有多个端口号,但是一个端口号只能对应一个进程。就好比是我们一个人可以有多个手机号码,但是呢是一个手机号码只能对应一个人。


tomcat

tomcat是一个web服务器,简单理解他就是运行服务的,也就是我们写的那些代码,到时候都是拿到我们的web服务器上去运行的,浏览器与服务器之间的数据交互,依托的正是 HTTP 协议。Web 服务器对 HTTP 协议做了封装处理,程序员无需直接操作协议(比如自行编写代码解析 HTTP 协议的规则),让 Web 开发的流程更便捷。也正因如此,Web 服务器也被称作 WWW 服务器、HTTP 服务器,核心功能是为用户提供网络信息的浏览服务。常见的 Web 服务器包括:Apache、Nginx、IIS、Tomcat 、Jboss 等。SpringBoot 框架内置了 Tomcat 服务器,无需额外配置就能直接运行程序。Tomcat 的默认端口号为 8080,因此我们开发的程序默认也通过 8080 端口进行访问。

我们的tomcat和spring是两家人,我们spring程序不一定使用tomcat运行,我们的tomcat也不一定运行spring程序,只不过我们现在是spring集成了tomcat,所以呢我们无需去安装tomcat,直接就可以运行

请求路径的分析

首先呢我们通过这个HTTP协议,我们找到这个对应的主机,那么在找到主机之后是主机上的哪一个程序呢?是8080进程那个程序,然后找到这个程序之后呢,我们访问这个程序里面的哪些资源呢?是hello这个路径里面的资源。

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

  • IP 地址解析:URL 中的127.0.0.1是本机回环地址,用于定位当前使用的计算机(即本机),无需通过外部网络即可实现本地通信。
  • 端口号作用:8080是端口号,用于精准找到本机上正在运行的对应进程 ------ 也就是占用 8080 端口的本地程序(通常是内置 Tomcat 的 SpringBoot 应用)。
  • 资源路径含义:/hello是请求的资源路径,资源本质是计算机中的数据,而 Web 资源特指通过网络可访问的、存放在服务器上的数据。该 URL 的核心目的是:向本机 8080 端口的程序请求/hello路径对应的资源数据。

访问出错问题

404

问题

我将路径改为/hello/sayhi

java 复制代码
@RestController
public class HelloController {


	//修改路径
    @RequestMapping("/hello/sayhi")
    public String hello() {
        return "hello spring boot";
    }
}

原因
404 状态码表示用户请求访问的资源不存在,大概率是请求 URL 的资源路径书写错误导致。
解决

观察 HTTP 请求的具体路径,快速定位路径不匹配问题。【可通过 Fiddler 工具抓包】

500

问题

如果后端代码出异常:

java 复制代码
@RestController
public class HelloController {

    @RequestMapping("/hello/sayhi")
    public String hello() {
        int a = 1 / 0; //异常代码
        return "hello spring boot";
    }
}

原因
500 状态码表示服务器内部错误,通常是服务器执行代码时触发未处理的异常(如程序逻辑错误导致服务器异常)
解决

出现500大概率就是后端出问题了,那么就赶紧去看后端哪里出问题了

无法访问此网站

问题

原因
具体诱因多为服务未成功启动、访问的 IP 地址错误或端口号书写错误 / 被占用
解决

出现这样的情况就赶紧去看一下,你的服务器启动没,IP地址端口号那些有问题没。

补充其他状态码

为方便开发中快速核对,整理高频状态码速查【不要背,要多查】:

类别 核心状态码 含义 / 排查重点
2xx 成功 200 请求成功,正常返回数据
201 成功创建资源(新增 / 上传场景)
3xx 重定向 302 临时重定向(如未登录跳转到登录页)
304 资源未修改,使用本地缓存
4xx 客户端错误 400 请求参数 / 格式错误
401 未认证,需先登录
403 无权限访问资源
404 资源路径不存在,检查 URL
405 HTTP 方法不匹配(如 GET/POST 混用)
5xx 服务器错误 500 服务器内部代码异常,查控制台日志
502 网关错误,检查上下游服务连通性
503 服务暂不可用(过载 / 维护)
504 网关超时,检查接口执行效率(如查询超时)

那么本期我们就到此结束,通过上述的学习,我们就可以轻松搭建好一个SpringBoot程序了。

相关推荐
MX_93592 小时前
使用Spring的BeanFactoryPostProcessor扩展点完成自定义注解扫描
java·后端·spring
1104.北光c°2 小时前
【黑马点评项目笔记 | 登录篇】Redis实现共享Session登录
java·开发语言·数据库·redis·笔记·spring·java-ee
爬山算法2 小时前
Hibernate(81)如何在数据同步中使用Hibernate?
java·后端·hibernate
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于javaweb的音乐节管理系统为例,包含答辩的问题和答案
java·eclipse
启山智软2 小时前
供应链商城核心功能模块清单
java·前端·开源
是萧萧吖2 小时前
每日一练——有效的括号
java·开发语言·javascript
程序员欣宸2 小时前
LangChain4j实战之十六:RAG (检索增强生成),Naive RAG
java·人工智能·ai·langchain4j
Ivanqhz2 小时前
现代异构高性能计算(HPC)集群节点架构
开发语言·人工智能·后端·算法·架构·云计算·边缘计算
Loo国昌2 小时前
【大模型应用开发】第三阶段:深度解析检索增强生成(RAG)原理
人工智能·后端·深度学习·自然语言处理·transformer