欢迎光临
我们一直在努力

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为例:

  • 打开IDEA,选择"New Project"

  • 选择"Spring Initializr"

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

  • 选择依赖(勾选Spring Web)

  • 完成创建

  • 三、项目结构说明

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

    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或重新导入项目

    总结

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

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

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

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

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

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

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

    • Spring Data JPA进行数据库操作

    • Spring Security添加安全认证

    • Spring Cloud构建微服务

    • RESTful API设计最佳实践

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

    赞(0)
    未经允许不得转载:171主机测评 » Spring Boot Web入门:从零开始构建web程序
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址