跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Java大前端java

SpringBoot + jQuery 实战:从零搭建留言板

SpringBoot 配合 jQuery 可快速构建前后端分离的留言板应用。项目定义了获取列表与发布留言两个核心接口,后端利用 Lombok 简化实体类编写,前端通过 Ajax 实现无刷新交互。代码展示了从数据接收、校验到页面动态渲染的全过程,同时指出当前方案仅使用内存存储,重启服务会导致数据丢失,适合作为理解 Web 交互机制的基础案例。

路由之心发布于 2026/2/2更新于 2026/9/959 浏览
SpringBoot + jQuery 实战:从零搭建留言板

SpringBoot + jQuery 实战:从零搭建留言板

需求分析

我们需要实现一个简单的表白墙功能,核心交互包括:

  1. 提交留言:用户输入信息后点击提交,后端接收并保存数据。
  2. 展示留言:页面加载时自动获取所有留言记录并渲染。

界面应包含发送者、接收者和留言内容的输入框,以及一个用于展示留言列表的容器。

接口设计

前后端约定采用 RESTful 风格进行交互,主要涉及两个接口:

1. 获取全部留言

  • 请求方式:GET
  • 路径:/message/getList
  • 响应格式:JSON 数组
[
  { "from": "黑猫", "to": "白猫", "message": "喵" },
  { "from": "黑狗", "to": "白狗", "message": "汪" }
]

浏览器发起该请求后,服务器返回当前存储的所有留言记录。

2. 发表新留言

  • 请求方式:POST
  • 路径:/message/publish
  • 请求体:JSON 对象
{ "from": "黑猫", "to": "白猫", "message": "喵" }
  • 响应格式:JSON 对象
{ "ok": true }

前端将表单数据序列化后发送至该接口,服务器处理成功后返回确认信息。

后端开发

引入 Lombok 简化开发

Lombok 是一个通过注解在编译期生成代码的工具库,能显著减少 Getter、Setter 和 toString 等样板代码。它属于源码级注解(SOURCE),仅在编译阶段生效,不会增加运行时负担。

在 Maven 项目中引入依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

IDE 通常支持插件(如 IntelliJ 的 EditStarter)来快速生成此类配置。

定义实体类

使用 @Data 注解自动生成常用方法,保持代码简洁:

import lombok.Data;

@Data
public class MessageInfo {
    private String from;
    private String to;
    private String message;
}

编写控制器

创建 MessageController,使用 ArrayList 在内存中暂存消息。实际生产中建议替换为数据库持久化。

import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;

@RequestMapping("/message")
@RestController
public class MessageController {
    // 内存存储,重启服务后数据会丢失
    private List<MessageInfo> messageInfos = new ArrayList<>();

    @RequestMapping("/getList")
    public List<MessageInfo> getList() {
        return messageInfos;
    }

    @RequestMapping("/publish")
    public boolean publish(MessageInfo messageInfo) {
        System.out.println(messageInfo);
        // 校验必填字段
        if (StringUtils.hasLength(messageInfo.getFrom()) 
            && StringUtils.hasLength(messageInfo.getTo()) 
            && StringUtils.hasLength(messageInfo.getMessage())) {
            messageInfos.add(messageInfo);
            return true;
        }
        return false;
    }
}

前端开发

修改 messagewall.html,利用 jQuery 的 Ajax 功能实现异步交互。

页面加载初始化

监听 DOM 加载事件,调用 load() 函数拉取历史留言:

$(document).ready(function() {
    load();
});

function load() {
    $.ajax({
        type: "get",
        url: "/message/getList",
        success: function(result) {
            // 清空旧内容避免重复渲染
            $("#messageList").empty();
            for (var message of result) {
                var divE = "<div>" + message.from + "对" + message.to + "说:" + message.message + "</div>";
                $("#messageList").append(divE);
            }
        }
    });
}

提交留言逻辑

绑定按钮点击事件,收集表单数据并发送 POST 请求:

function submit() {
    var from = $("#from").val();
    var to = $("#to").val();
    var say = $("#say").val();

    if (from == '' || to == '' || say == '') {
        alert("请填写完整信息");
        return;
    }

    $.ajax({
        type: "post",
        url: "/message/publish",
        data: { from: from, to: to, message: say },
        contentType: "application/json; charset=utf-8",
        success: function(result) {
            if (result) {
                // 动态追加新留言到页面
                var divE = "<div>" + from + "对" + to + "说:" + say + "</div>";
                $("#messageList").append(divE);
                // 清空输入框
                $('#from').val("");
                $('#to').val("");
                $('#say').val("");
            } else {
                alert("发表留言失败!");
            }
        }
    });
}

注意:虽然示例中使用了默认 data 格式,但在生产环境中若后端严格解析 JSON Body,需配合 JSON.stringify() 及设置 contentType。

测试与局限

启动 SpringBoot 应用,访问 http://127.0.0.1:8080/messagewall.html 即可看到效果。

局限性说明: 当前方案使用 private List<MessageInfo> 在内存中存储数据。这意味着:

  1. 刷新页面前,已提交的留言会保留。
  2. 一旦服务器重启或进程结束,所有数据将丢失。
  3. 多用户并发场景下,内存共享可能带来一致性问题。

后续扩展建议引入 MySQL 或 Redis 进行持久化存储,确保数据安全可靠。

目录

  1. SpringBoot + jQuery 实战:从零搭建留言板
  2. 需求分析
  3. 接口设计
  4. 1. 获取全部留言
  5. 2. 发表新留言
  6. 后端开发
  7. 引入 Lombok 简化开发
  8. 定义实体类
  9. 编写控制器
  10. 前端开发
  11. 页面加载初始化
  12. 提交留言逻辑
  13. 测试与局限

更多推荐文章

查看全部
  • CoPaw 个人助理部署与定制实战:从零搭建专属 AI 数字搭档
  • LLaMA-Factory 微调 GPT-OSS-20B 模型教程(AutoDL+LoRA)
  • Neo4j 性能监控实战:5 个关键技巧快速诊断数据库瓶颈
  • 分布式与微服务架构下的 Session 同步方案
  • Windows 平台 ComfyUI 环境配置与常见问题排查指南
  • 双指针算法实战:移动零、快乐数与盛水容器解析
  • VS Code 中 GitHub Copilot 配置与高阶用法实战
  • 基于 C# IOCP 的 485 转 Web API 物联网服务器框架解析
  • DeepSeek-R1 大模型基于 MS-Swift 框架的部署、推理与微调实践
  • MCP 插件配置实战:browser-tools-mcp 集成指南
  • 第十四届蓝桥杯 C/C++ 省赛 B 组题解
  • 生产环境 Nginx 双机热备部署 - Keepalived 多模式配置
  • F5 刷新背后:浏览器缓存策略与渲染流程深度解析
  • C++ Lambda 表达式详解
  • 程序员式浪漫:代码示爱、专属推送与网页游戏案例
  • Python 函数核心概念与实战指南
  • Claude Code 的模型配置与默认值说明
  • Linux 基础 IO 详解
  • 程序员进阶指南:精选在线学习、兼职与交流平台汇总
  • Flutter EWS 组件适配鸿蒙实战:Exchange 邮件日历同步方案

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online