news 2026/3/27 8:27:53

Spring Boot Web入门:从零开始构建web程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot Web入门:从零开始构建web程序

Spring Boot作为当前Java领域最流行的框架之一,极大地简化了Spring应用的初始搭建和开发过程。本文将带你从零开始,创建一个简单的Spring Boot Web应用,并通过详细的步骤解释整个过程。

一、Spring Boot简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。它具有以下特点:

  • 自动配置:基于类路径和已配置的bean自动配置Spring应用

  • 起步依赖:提供了一系列"starter"依赖,简化Maven/Gradle配置

  • 内嵌服务器:默认内嵌Tomcat、Jetty或Undertow,无需部署WAR文件

  • 生产就绪:提供健康检查、指标、外部化配置等生产级功能

二、创建Spring Boot项目

我们使用IDE创建:

以IntelliJ IDEA为例:

  1. 打开IDEA,选择"New Project"

  2. 选择"Spring Initializr"

  3. 填写项目信息(记得选Maven,这里我默认你之前已经配置了,没有的话要去配置)

  4. 选择依赖(勾选Spring Web)

  5. 完成创建

三、项目结构说明

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

text

demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com.niuniu/ │ │ │ └── DemoApplication.java # 主启动类 │ │ └── resources/ │ │ ├── static/ # 静态资源 │ │ ├── templates/ # 模板文件 │ │ └── application.properties # 配置文件 │ └── test/ # 测试代码 ├── pom.xml # Maven配置文件 └── README.md

四、编写第一个控制器

创建控制器类

src/main/java/com/niuniu/目录下创建HelloController.java

package com.niuniu; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { // 使用@GetMapping更明确地表示处理GET请求 @GetMapping("/hello") public String hello(@RequestParam(value = "name", defaultValue = "World") String name) { System.out.println("Received request with name: " + name); // 简单业务逻辑示例 String greeting = "Hello " + name + "!"; // 可以添加更多业务逻辑 if ("Spring".equalsIgnoreCase(name)) { greeting += " Welcome to Spring Boot!"; } return greeting; } // 添加第二个端点作为示例 @GetMapping("/greet") public String greet(@RequestParam(value = "user", required = false) String user) { if (user == null || user.trim().isEmpty()) { return "Hello Anonymous User!"; } return "Good day, " + user + "!"; } }

1. 添加主页

创建简单的HTML主页,在src/main/resources/static目录下创建index.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Spring Boot 大角猫start</title> <style> body { font-family: Arial, sans-serif; margin: 40px; background-color: #f5f5f5; } .container { max-width: 800px; margin: 0 auto; background-color: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } h1 { color: #2c3e50; } .endpoint { background-color: #f8f9fa; padding: 15px; border-left: 4px solid #3498db; margin: 20px 0; } </style> </head> <body> <div class="container"> <h1>Spring Boot Web-作者:大角猫ljp</h1> <p>这是一个简单的Spring Boot Web应用程序,大角猫ljp在此创建。</p> <h2>可用端点:</h2> <div class="endpoint"> <h3>打招呼接口</h3> <p><strong>URL:</strong> <code>/hello?name=YourName</code></p> <p><strong>示例:</strong> <a href="/hello?name=大角猫ljp" target="_blank">/hello?name=大角猫ljp</a></p> </div> <div class="endpoint"> <h3>问候接口</h3> <p><strong>URL:</strong> <code>/greet?user=UserName</code></p> <p><strong>示例:</strong> <a href="/greet?user=大角猫ljp" target="_blank">/greet?user=大角猫ljp</a></p> </div> </div> </body> </html>

五、运行应用程序

方式1:通过主类运行

找到主启动类DemoApplication.java

package com.niuniu; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //启动类 @SpringBootApplication public class SpringbootQuickstartApplication { public static void main(String[] args) { SpringApplication.run(SpringbootQuickstartApplication.class, args); } }

六、测试应用

1. 验证应用是否启动

启动成功后,控制台会显示类似信息:

2. 测试端点

打开浏览器输入 http://localhost:8080/

测试:使用默认值

text

http://localhost:8080/hello

响应:Hello World!

测试:测试第二个端点

text

http://localhost:8080/greet?user=Developer

响应:Good day, Developer!

七、配置与应用

1. 修改端口号

src/main/resources/application.properties中添加

2. 添加日志配置

application.properties中添加日志配置

3. 完整的application.properties示例

properties

# 应用基本信息 spring.application.name=demo-app # 服务器配置 server.port=8080 server.servlet.context-path=/ # 日志配置 logging.level.root=WARN logging.level.com.niuniu=INFO # 热部署配置(开发环境) spring.devtools.restart.enabled=true spring.devtools.restart.additional-paths=src/main/java

八、项目扩展

添加错误处理

创建全局异常处理:

package com.niuniu.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public String handleAllExceptions(Exception ex) { return "服务器内部错误: " + ex.getMessage(); } }

添加单元测试

src/test/java/com/niuniu/目录下创建测试类:

package com.niuniu; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @SpringBootTest @AutoConfigureMockMvc class HelloControllerTest { @Autowired private MockMvc mockMvc; @Test void helloEndpoint_shouldReturnGreeting() throws Exception { mockMvc.perform(get("/hello").param("name", "Spring")) .andExpect(status().isOk()) .andExpect(content().string("Hello Spring! Welcome to Spring Boot!")); } @Test void helloEndpoint_withoutName_shouldUseDefault() throws Exception { mockMvc.perform(get("/hello")) .andExpect(status().isOk()) .andExpect(content().string("Hello World!")); } }

九、部署与打包

1. 构建可执行JAR

Spring Boot默认打包为可执行JAR,包含所有依赖和内嵌服务器:

bash

# 清理并打包 mvn clean package # 查看生成的文件 ls -la target/*.jar

2. 运行打包的应用

bash

java -jar target/demo-0.0.1-SNAPSHOT.jar # 指定运行参数 java -jar target/demo-0.0.1-SNAPSHOT.jar --server.port=8081

3. 构建Docker镜像

创建Dockerfile:

dockerfile

FROM openjdk:17-jdk-slim VOLUME /tmp COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] EXPOSE 8080

构建和运行:

bash

# 构建镜像 docker build -t spring-boot-demo . # 运行容器 docker run -p 8080:8080 spring-boot-demo

十、常见问题与解决方案

1. 端口被占用

问题:启动时报端口被占用
解决:修改application.properties中的端口或停止占用端口的进程

2. 依赖下载失败

问题:Maven依赖下载失败
解决

  • 检查网络连接

  • 使用国内镜像源(如阿里云Maven镜像)

  • 清理本地仓库后重试

3. 热部署不生效

问题:修改代码后需要重启应用
解决

  • 确认添加了spring-boot-devtools依赖

  • 检查IDE自动编译配置

  • 重启IDE或重新导入项目

总结

通过本文,我们完成了以下内容:

  1. 了解了Spring Boot的基本概念和优势

  2. 学会了创建Spring Boot项目的多种方法

  3. 编写了一个简单的REST控制器

  4. 掌握了Spring Boot应用的运行、测试和配置

  5. 学习了项目扩展和部署的基本知识

这个简单的"Hello"应用虽然基础,但它包含了Spring Boot Web开发的核心要素。从这里出发,你可以继续学习:

  • Spring Data JPA进行数据库操作

  • Spring Security添加安全认证

  • Spring Cloud构建微服务

  • RESTful API设计最佳实践

Spring Boot的强大之处在于它的"约定优于配置"理念,让你能够快速搭建生产级应用。希望这个入门指南能帮助你开启Spring Boot开发之旅!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 14:02:04

力扣206.反转链表-双指针法(推荐)

链表反转是数据结构与算法中的经典问题&#xff0c;也是面试中的高频考点。这个问题看似简单&#xff0c;却能考察程序员对指针操作、递归思维和边界条件的处理能力。在本文中&#xff0c;我们将深入探讨链表反转的两种经典解法&#xff1a;迭代法和递归法&#xff0c;并提供详…

作者头像 李华
网站建设 2026/3/26 13:31:28

Promise 与 async/await 错误处理最佳实践指南

引言&#xff1a;为什么错误处理如此重要&#xff1f; 在异步编程中&#xff0c;错误处理常常被忽视&#xff0c;但它却是构建健壮应用的关键。想象一下&#xff1a;一个未处理的 Promise 拒绝可能导致整个应用崩溃&#xff0c;而良好的错误处理能提升用户体验并简化调试。本文…

作者头像 李华
网站建设 2026/3/20 2:08:55

类型转换的隐形陷阱:如何写出更安全的JavaScript代码

引言&#xff1a;为什么前端类型转换特别“危险”&#xff1f;JavaScript作为一门动态弱类型语言&#xff0c;其灵活的类型系统既是它的魅力所在&#xff0c;也是许多诡异Bug的根源。与其他静态类型语言不同&#xff0c;JavaScript在运行时默默地执行着大量的隐式类型转换&…

作者头像 李华
网站建设 2026/3/25 18:00:07

python+vue3的数码手机相机商城购买平台的设计与实现87679776

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 pythonvue3的数码手机相机商城购买平台的设计与实现87679776 项目技术简介 Python版本&…

作者头像 李华
网站建设 2026/3/22 16:34:12

Langchain-Chatchat提升政务服务透明度与满意度

Langchain-Chatchat&#xff1a;让政务问答更安全、智能与高效 在政务服务大厅里&#xff0c;一位市民拿着一堆政策文件反复翻看&#xff0c;却仍搞不清新生儿落户到底要准备哪些材料&#xff1b;另一边&#xff0c;客服人员正疲于应对第37个关于“居住证办理条件”的重复咨询。…

作者头像 李华