SpringBoot入门:快速构建第一个Web应用

news/2025/2/2 22:56:44 标签: spring boot, 后端, java

前言

SpringBoot作为Java领域最流行的微服务框架之一,凭借其“约定优于配置”的理念,极大简化了Spring应用的初始搭建和开发过程。本文将手把手带你创建一个SpringBoot项目,并实现第一个REST接口,同时解析其核心机制。

一、SpringBoot简介与优势

1.1 什么是SpringBoot?

SpringBoot是Pivotal团队基于Spring框架推出的快速开发脚手架,核心目标是:

  • 零XML配置:通过注解和默认配置简化开发

  • 内嵌Web服务器:无需部署WAR包,直接运行JAR

  • 起步依赖:提供预置依赖组合(如spring-boot-starter-web

  • 生产级特性:监控、健康检查、外部化配置等开箱即用

1.2 对比传统Spring MVC开发

特性Spring MVCSpringBoot
项目创建手动配置web.xml、pom依赖Spring Initializr一键生成
内嵌服务器需部署到Tomcat/Jetty内置Tomcat/Jetty/Undertow
配置复杂度需显式配置组件自动配置(按需加载)
依赖管理手动管理版本冲突

starter统一管理依赖

二、使用Spring Initializr创建项目

2.1 通过官网创建

  1. 访问 https://start.spring.io

  2. 填写项目信息:

    Project: Maven
    Language: Java
    Spring Boot: 3.x (建议选择最新稳定版)
    Group: com.example
    Artifact: demo
    Dependencies: Spring Web

 

2.2 使用IDEA创建(快捷方式)

  1. 打开IntelliJ IDEA → File → New → Project

  2. 选择Spring Initializr,填写项目信息

  3. 勾选Spring Web依赖

  4. 完成创建后,项目结构如下:

demo
├── src
│   ├── main
│   │   ├── java/com/example/demo
│   │   │   └── DemoApplication.java  # 启动类
│   │   └── resources
│   │       ├── application.properties # 配置文件
│   │       └── static/               # 静态资源
├── pom.xml                          # Maven依赖管理

 

三、编写第一个Hello World接口

com.example.demo包下新建HelloController.java

java">import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, SpringBoot!";
    }
}
  • @RestController:组合了@Controller@ResponseBody,直接返回JSON数据

  • @GetMapping:等价于@RequestMapping(method = RequestMethod.GET)

3.2 启动应用

打开启动类DemoApplication.java,运行main方法:

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

 控制台输出以下日志表示启动成功:

java">Hello, SpringBoot!

3.3 测试接口

浏览器访问 http://localhost:8080/hello,页面显示:

java">Hello, SpringBoot!

 

四、内嵌Tomcat原理分析

4.1 内嵌服务器如何生效?

关键依赖spring-boot-starter-web包含:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

SpringBoot通过条件装配自动配置Tomcat:

  • 当检测到类路径存在ServletTomcat类时

  • 创建TomcatServletWebServerFactory实例

4.2 启动流程核心代码

SpringApplication.run()方法中:

  1. 创建ApplicationContext

  2. 调用createWebServer()初始化Web服务器

  3. 加载ServletFilter(如DispatcherServlet)

  4. 启动Tomcat并绑定端口

4.3 与传统Tomcat部署对比

传统方式SpringBoot内嵌
部署形式WAR包部署到Tomcat/webapps目录直接执行JAR(含内嵌Tomcat)
服务器配置修改server.xmlapplication.properties配置
多环境适配需手动配置不同环境Profile一键切换

五、注意事项与常见问题

  1. 端口冲突
    若8080端口被占用,在application.properties中添加:

    server.port=8081

   2.依赖缺失
        确保pom.xml中包含: 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 3.启动类位置
启动类需放在根包下,否则组件扫描可能失效。


http://www.niftyadmin.cn/n/5840345.html

相关文章

ASP.NET Core与配置系统的集成

目录 配置系统 默认添加的配置提供者 加载命令行中的配置。 运行环境 读取方法 User Secrets 注意事项 Zack.AnyDBConfigProvider 案例 配置系统 默认添加的配置提供者 加载现有的IConfiguration。加载项目根目录下的appsettings.json。加载项目根目录下的appsettin…

PostgreSQL技术内幕24:定时任务调度插件pg_cron

文章目录 0.简介1.基础知识2.pg_cron安装使用方式2.1 安装pg_cron2.2 使用方式 3.实现原理3.1 启动过程3.2 任务添加和管理3.3 调度过程3.4 执行原理 0.简介 pg_cron是PostgreSQL中的一个简单的基于cron的任务调度插件&#xff0c;本文将从其基础知识&#xff08;Linux中Cron的…

ArkTS语言介绍

文章目录 一、基本知识声明类型运算符语句函数函数声明可选参数Rest参数返回类型函数的作用域函数调用函数类型箭头函数(又名Lambda函数)闭包函数重载类字段方法构造函数可见性修饰符对象字面量抽象类接口接口属性接口继承抽象类和接口泛型类型和函数泛型类和接口泛型约束泛型…

交易股指期货有什么技巧吗?

交易股指期货有啥窍门呢&#xff1f;其实啊&#xff0c;追涨杀跌这招&#xff0c;虽然能挣点小钱&#xff0c;但风险也不小&#xff0c;一不小心就可能亏大了。我说的追涨杀跌&#xff0c;不是那种天天追着价格跑的小打小闹&#xff0c;而是要看大趋势&#xff0c;做宏观操作。…

深入理解Spring框架:从基础到实践

前言 Spring框架是一个开源的企业级应用开发框架&#xff0c;它为Java开发者提供了灵活的架构支持&#xff0c;特别是在依赖注入&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;方面。本文将通过具体的示例&#xff0c;带你从Spring框架的概述、IOC容器…

《AI大模型开发笔记》DeepSeek技术创新点

一、DeepSeek横空出世 DeepSeek V3 以颠覆性技术架构创新强势破局&#xff01;革命性的上下文处理机制实现长文本推理成本断崖式下降&#xff0c;综合算力需求锐减90%&#xff0c;开启高效 AI 新纪元&#xff01; 最新开源的 DeepSeek V3模型不仅以顶尖基准测试成绩比肩业界 …

java每日精进1.31(SpringSecurity)

在所有的开发的系统中&#xff0c;都必须做认证(authentication)和授权(authorization)&#xff0c;以保证系统的安全性。 一、基础使用 1.依赖 <dependencies><!-- 实现对 Spring MVC 的自动化配置 --><dependency><groupId>org.springframework.bo…

指针的进化—sizeof和strlen对比(字符串和字符数组的区分)

1.前言 如果你对各个数组的内容存放是什么没有个清晰的概念&#xff0c;对指针偏移之后的数量算不出来或者模棱两可&#xff0c;那么本篇就来详细介绍sizeof和strlen来具象化的显示数组的内容存放了多少内容&#xff0c;偏移量变化后的变化&#xff0c;这个数组进行运算后会不会…