这份教程假设你完全没写过代码。从"什么是黑窗口 cmd"讲起,带你:装好环境 → 创建项目 → 写出第一个接口 → 在浏览器看到 Hello World。每个名词第一次出现时都会用大白话解释;看不懂的词,去 术语表 查一下就好。全程 Windows 演示,Mac 用户差异见 第 0 章 的说明。
别急着装软件。先弄明白"我们要做什么、要用的东西是什么",后面每一步你才知道自己在干嘛。
我们要写一个运行在你自己电脑上的小程序。写完之后,在浏览器地址栏输入一个网址,网页上就会显示 Hello World。就这么小,但它是所有网站后端的第一步。
http://localhost:8080/hello,页面会显示 Hello World 这个网址是什么意思,第 4 章会逐个词拆开讲。
你天天用手机 App 和网页,它们背后都分两拨人干的活,用餐厅一比喻就懂了:
顾客直接看到的部分:页面长得好不好看、按钮在哪里。对应你在浏览器里看到的网页、手机 App 的界面。
顾客看不见,但真正"干活"的地方:接收点单、处理数据、把结果做出来。我们今天要写的就是它。
前厨和后厨约定好的"传菜口"。前端从某个"窗口"递单子、取结果。今天我们会开一个叫 /hello 的窗口,它只负责端出一句话:Hello World。
今天的流程就是:你自己扮演顾客(用浏览器),从 /hello 这个取餐窗口,取到后厨(你写的 Java 程序)做好的一句话。
一种"和电脑对话的语言"。就像人类有中文、英文,跟电脑说话要用编程语言。Java 是世界上最流行的语言之一,银行、电商、安卓 App 背后大量用它。
别人用 Java 写好的"半成品毛坯房":网站后端需要的通用零件(接收网址请求、启动服务等)都帮你造好了,你只管往里填自己的逻辑。它是 Java 后端事实上的标准,学会它找工作都用得上。
IntelliJ IDEA,专业叫法是 IDE(开发工具)。写文档用 Word,写代码就用 IDEA——它提供代码颜色高亮、自动补全、报错提示、一键运行,没有它写代码会痛苦十倍。社区版(Community)免费,够用。
后面还会遇到一位配角 Maven(帮你的项目自动下载现成代码包的"管家"),到第 1 章再细讲。
先学会两个基本功(打开黑窗口、配环境变量),再装 JDK、Maven、IDEA 三样软件。Spring Boot 本身不需要单独安装——它是以"依赖包"的形式被 Maven 自动下载到项目里的。
cmd(也叫命令行、黑窗口)是 Windows 自带的一个黑色窗口:你打字输入命令、按回车,电脑就执行。装完软件后,我们要用它来"验收"软件装好了没有。
Win 键(田字格图标)→ 直接打字输入 cmd → 按回车。Win + R → 弹出小窗口后输入 cmd → 回车。Spring Boot 4.x 要求 Java 17 及以上,本教程使用 JDK 21(LTS 长期支持版,最稳定)。
https://adoptium.net/zh-CN/temurin/releases/(Adoptium Temurin,免费开源,放心用)。在页面上选择:版本 21、操作系统 Windows、架构 x64,下载 .msi 结尾的安装包(Oracle 官方版也可以)。C:\Program Files\Eclipse Adoptium\jdk-21.x.x),并避免装到含中文或空格的自定义路径,建议就用默认位置,或者像 C:\jdk\21 这样干净的目录。JAVA_HOME(告诉整个电脑"Java 装在哪"):
Win 键搜索"环境变量" → 点开"编辑系统环境变量" → 在弹窗右下角点"环境变量(N)…"按钮。Path → 双击编辑 → 点新建,填入 %JAVA_HOME%\bin → 一路点"确定"保存所有弹窗。java -version 后回车:openjdk version "21.x.x" 开头的两三行字。如果提示 'java' 不是内部或外部命令…,说明环境变量没配对或没开新窗口——回到第 3 步逐字检查,90% 是这里出的问题。
pom.xml 文件),它自动去网上下载、放到统一仓库、还要管好版本搭配。没有它,你就得自己一个个去找包、下包、对版本,极易出错。
https://maven.apache.org/download.cgi,找到 Binary zip archive,下载文件名类似 apache-maven-3.9.9-bin.zip 的压缩包。C:\Program Files\maven。注意:解压后会多出一层文件夹(如 apache-maven-3.9.9),记住这个最里面那层的路径(判断标准:这层里面能看到 bin 文件夹)。mvn -v,能看到 Apache Maven 3.9.x 和 Java 版本信息即成功。conf\settings.xml,找到 <mirrors> 标签,在它内部(两个标签之间)加入下面这段,保存即可:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
之后所有依赖都会从阿里云下载。下载下来的包会缓存在 C:\Users\你的用户名\.m2\repository 文件夹里,这叫本地仓库——同一个包只下载一次,以后新项目直接复用。
https://www.jetbrains.com/idea/download/,页面往下拉,选 Community Edition(社区版,免费) 下载即可——本教程所有功能它都够用。(Ultimate 付费版是进阶功能,不需要。)C:\> java -version C:\> mvn -v
一个 Spring Boot 项目有固定的文件夹结构和十来个配置文件,手动从零建既麻烦又容易错。所以我们用官方提供的"项目生成器"(Spring Initializr)一键生成骨架,不用手写任何配置。
new1 项目),不用走下面的创建步骤——打开 IDEA → 点 Open → 选中项目文件夹 → 弹窗选 Trust Project(信任项目)→ 等右下角进度条(正在自动下载依赖)转完,直接跳到第 4 章运行即可。
| 选项 | 填写 | 大白话解释 |
|---|---|---|
| Group | com.example | "组织名",习惯用倒着写的域名。新手随便填,不影响运行。 |
| Artifact | demo | 项目名字。最终启动类的类名会是 DemoApplication。 |
| Type / Language | Maven / Java | 用 Maven 管理依赖,用 Java 语言写。 |
| Packaging | Jar | 最终打包成 jar 文件(一个能直接运行的压缩包)。 |
| JDK / Java | 21 | 选你第 1 章装的 JDK。 |
| Spring Boot 版本 | 最新稳定版(或 4.1.x) | 别选带 SNAPSHOT 或 M1/M2 字样的(那是半成品测试版)。 |
| Dependencies(依赖) | 勾选 Spring Web | "依赖"= 现成的功能代码包。要写网站接口,Spring Web 是唯一必需项。 |
https://start.spring.io/Maven / Java / 21,在 ADD DEPENDENCIES 里点开选 Spring Web,然后点 Generate,会下载一个 zip 压缩包。C:\Users\你\Desktop)。demo 文件夹(注意:选文件夹本身,不是里面的某个文件)→ 弹窗点 Trust Project → 等 IDEA 自动识别并下载依赖完成。十几样东西你暂时只需要关心 3 个,其余全自动生成、不用碰:
pom.xml —— 购物清单:写着这个项目需要哪些依赖,Maven 照单下载。DemoApplication.java —— 开机按钮:整个程序从这里启动。application.properties —— 设置面板:端口号、应用名等设置写在这里。这一章我们开一个"取餐窗口":浏览器访问 /hello 这个窗口,程序就端出一句话 "Hello World"。只需新建一个 Java 类,不改其他任何文件。
回想第 0 章的餐厅比喻:接口(Controller,控制器)就是前后端之间的取餐窗口。它规定:访问哪个网址 → 执行哪段代码 → 返回什么结果。今天的接口非常简单——一道菜:
DemoApplication.java 所在的包 com.example.demo(就是文件夹图标)→ 右键它 → New → Java Class。HelloController,回车创建。(⚠️ 名字大小写要一模一样。)package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // ① 告诉 Spring:这是一个"取餐窗口",负责处理浏览器的请求
public class HelloController {
@GetMapping("/hello") // ② 窗口号牌:浏览器访问 http://localhost:8080/hello 时,执行下面的方法
public String sayHello() {
return "Hello World"; // ③ 端出去的"菜":这串字会直接显示在网页上
}
}
@RestController:贴在类上的注解。注解就是"标签",都是 @ 开头——Spring 看到 @RestController 标签,就知道这个类负责处理请求,并把方法的返回值直接显示到网页上。@GetMapping("/路径"):标签写着"访问哪个网址时调用这个方法"。@GetMapping({"/", "/hello"}),一个方法同时挂两个号牌。
双击打开 src/main/resources/application.properties。这个文件就是"设置面板",一行一条设置,# 后面是注释:
spring.application.name=demo # 应用名(只是个名字,不影响运行)
server.port=8080 # 端口。8080 是默认值,通常不用改;想避开冲突可改成 8081
最激动人心的一章。点一下运行按钮,Spring Boot 内置的服务器(Tomcat)就会启动,等你的浏览器来访问。
| 部分 | 大白话解释 |
|---|---|
http:// | 固定开头,表示"用网页的方式访问",照抄即可。 |
localhost | 意思是"本机",即你自己的这台电脑。因为程序跑在你电脑上,所以访问它就行。(别人要访问你的接口,才需要你的 IP 地址,暂不涉及。) |
8080 | 端口,像门牌号:一栋楼(你的电脑)有很多个门,每个门后面住一个程序。8080 是 Spring Boot 默认的门牌号。 |
/hello | 找楼里的哪个"取餐窗口",对应第 3 章 @GetMapping("/hello") 里写的路径。 |
DemoApplication.java(就是带 main 方法、"开机按钮"的那个类)。main 方法左边绿色三角 ▶,选 Run 'DemoApplication'(也可以用右上角的绿色三角)。页面显示 Hello World 🎉 —— 恭喜,你的第一个 Spring Boot 项目跑通了!刚才那一瞬间发生的事:浏览器敲你家门(8080 号门)→ 说出暗号 /hello → 你的程序查到这是 HelloController 的活 → 执行 sayHello() → 把 "Hello World" 端出来。
Tomcat started on port 8080,浏览器能看到 Hello World。如果浏览器显示 404,说明程序活着、只是网址不对——检查是不是 /hello、大小写是否一致。其他报错去第 5 章对号入座。
Ctrl + C。localhost:8080 会打不开(提示无法访问)——这是正常的,因为"店"已经打烊了。不用 IDEA 也能跑:在项目根目录(pom.xml 所在的文件夹)的地址栏输入 cmd 回车(快速在当前文件夹打开 cmd 的技巧),然后任选一种:
# 方式一:直接运行(开发时常用)
mvn spring-boot:run
# 方式二:打包成 jar 再运行(以后部署到服务器时用)
mvn package
java -jar target\demo-0.0.1-SNAPSHOT.jar
程序运行中,改代码它不会自动更新(店开着的时候菜谱改了,端出去的还是老菜)。两种办法:
spring-boot-devtools 依赖(IDEA 新建的 Spring 项目默认自带),改完代码按 Ctrl + F9(Build Project),程序会自动重启加载新代码,不用手动停。application.properties 里把 server.port 改成 8081,之后访问 http://localhost:8081/hello(门牌号变了,网址也要跟着变)。
第一次跑项目 90% 的问题都在这下面,先看报错信息里的英文关键词(如 Port、404、encoding),再点开对应条目对号入座。改完配置记得"重启程序/新开窗口"再验证。
打开 cmd:按 Win 键直接打字搜 cmd 回车,或 Win + R 输入 cmd 回车(详见 1.0 节)。找环境变量窗口:Win 键搜索"编辑系统环境变量"→ 点右下角"环境变量"按钮。搜不到时,也可以走长路:此电脑右键 → 属性 → 高级系统设置 → 环境变量。
8080 端口已被其他程序占用。找出是谁占用的:
cmd 中执行:
netstat -ano | findstr :8080
输出最后一列是 PID(进程编号),例如 12345,然后:
taskkill /PID 12345 /F
⚠️ 注意:如果这个 PID 是你自己在 IDEA 里启动的应用,直接去 IDEA 点红色方块停止即可,别强杀。嫌麻烦也可以直接改端口:application.properties 里加 server.port=8081,访问地址相应变成 http://localhost:8081/hello。
大概率是国内网络访问国外 Maven 仓库太慢。解决方案:
settings.xml 配置阿里云镜像(如果还没配)。settings.xml。右键项目根目录的 pom.xml → 选择 Add as Maven Project(添加为 Maven 项目)。之后 IDEA 会自动导入依赖,也可点 Maven 工具窗口的刷新按钮强制重新导入。
通常是 IDEA 里设置的 JDK 版本和 pom.xml 里声明的 java.version 不一致。逐一检查:
21,Language level 选 21。编码不一致导致。两步解决:① Help → Edit Custom VM Options…,在文件末尾加一行 -Dfile.encoding=UTF-8,重启 IDEA;② File → Settings → Editor → File Encodings,把三处编码都设为 UTF-8。
先说好消息:出现这个页面说明程序已经跑起来了,只是这个地址没有对应的接口。逐项检查:
@GetMapping 里的路径完全一致(区分大小写),如 http://localhost:8080/hello。HelloController 类是否和启动类在同一个包下(都是 com.example.demo),不在的话 Spring 找不到它。@RestController 注解。Tomcat started on port 8080 一致(你若改成了 8081,网址也要改)。Community 社区版的部分版本不带这个向导。改用方式 B:浏览器打开 https://start.spring.io/ 生成 zip → 解压 → IDEA 里 File → Open 导入,效果一模一样。
程序运行中不会自动加载新代码。① 停掉重新运行;或 ② 配了 spring-boot-devtools 的话按 Ctrl + F9 重新编译自动重启。另外浏览器可能缓存了旧页面,按 Ctrl + F5 强制刷新。
IDEA 版本不同,菜单位置略有差异。两个万能技巧:① 按 Shift 连按两次(Search Everywhere),直接搜按钮名,如 "Project Structure";② 菜单名搜不到时用 Help → Find Action。还不行就搜索"你的 IDEA 版本 + 操作名称"。
完全正常,所有人都是这样过来的。先照着做出来,再慢慢理解——能跑通比能背下来重要一百倍。名词混脸熟即可(术语表常翻),代码看不懂就先知道"每行中文注释在干嘛"。做出第一个 Hello World 后,你已经跨过了最难的一步。
Spring Boot 是 Java 最主流的网站后端开发框架:把麻烦的配置都替你做好了("约定大于配置"),几行代码就能起一个网站服务。走完本教程后,建议按这个顺序进阶:① 让接口接收参数(@RequestParam);② 返回 JSON 数据(方法直接返回一个对象即可自动转换);③ 连接数据库(Spring Data JPA 或 MyBatis)。你写的 HelloController 正是这一切的起点。
不用背。出现在正文里的名词,都能在这张表里找到一句大白话解释。
| 名词 | 一句话解释 |
|---|---|
| Java | 一种编程语言,跟电脑"说话"用的语言。 |
| JDK | Java 开发工具包:让电脑能运行和开发 Java 程序的全套工具。 |
| Spring Boot | Java 的后端开发框架,网站后端的"半成品毛坯房",填上自己的逻辑就能用。 |
| Spring Initializr | 官方的项目生成器(脚手架),一键生成项目骨架。 |
| Maven | 依赖管家:按"购物清单"自动下载、管理项目需要的代码包。 |
| 依赖 | 别人写好的现成功能代码包,你的项目拿来直接用(如 Spring Web)。 |
| 本地仓库 | Maven 存放已下载依赖的本地文件夹,默认 C:\Users\你\.m2\repository,只下载一次。 |
| pom.xml | Maven 的购物清单:声明项目名、用什么 JDK、需要哪些依赖。 |
| IDEA | 写代码的软件(IDE),相当于写文档用的 Word。社区版免费。 |
| cmd / 命令行 | Windows 自带的黑窗口:打字输入命令、回车执行。 |
| 环境变量 | 操作系统的"通讯录":记录某个软件装在哪,其他程序按图索骥。 |
| 启动类 | 带 main 方法和 @SpringBootApplication 的类,整个程序的"开机按钮"。 |
| 注解 | 贴在代码上的标签(@ 开头,如 @RestController),框架看到标签就自动干活。 |
| 接口 / Controller | 前后端之间的"取餐窗口":规定访问哪个网址 → 执行哪段代码 → 返回什么。 |
| 端口 | 程序在电脑上的"门牌号"。8080 是 Spring Boot 默认端口。 |
| localhost | "本机"的意思,指你自己的这台电脑。 |
| Tomcat | 内置在 Spring Boot 里的网站服务器,负责接听浏览器请求,控制台会打印它的启动信息。 |
| 404 | "这个地址没有对应内容"。程序活着,但网址路径写错了。 |
| JSON | 前后端传数据用的通用格式,长这样:{"name":"张三"},进阶时你会遇到。 |
成品项目由 3 个关键文件组成(new1 项目就是完整示例,可对照检查你的每一步)。
Spring Boot 4.x 的依赖命名:Web 开发用 spring-boot-starter-webmvc(旧版 Boot 3.x 叫 spring-boot-starter-web)。用 start.spring.io 生成的话不用手写,此处仅供对照。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.1.1</version> <!-- 版本号按需调整 -->
</parent>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<!-- Web 开发核心依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<!-- 开发工具:改代码自动重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
</dependencies>
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // 组合注解:自动配置 + 组件扫描 + 启动配置
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args); // 启动入口
}
}
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // 取餐窗口
public class HelloController {
@GetMapping({"/", "/hello"}) // 首页和 /hello 都返回同一句话
public String sayHello() {
return "Hello World";
}
}
spring.application.name=demo # 应用名(仅显示用)
server.port=8080 # 服务端口(默认 8080)
@GetMapping("/bye") 接口返回"Goodbye";③ 让接口返回 JSON(方法返回一个对象即可自动转换)。每一步遇到问题,都回到第 5 章和第 6 章查。