在Java里怎样构建一个简单的留言板系统

来源:编程网作者:星宫一花头衔:网络博主
导读:本期聚焦于小伙伴创作的《在Java里怎样构建一个简单的留言板系统》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《在Java里怎样构建一个简单的留言板系统》有用,将其分享出去将是对创作者最好的鼓励。

在Java中构建简单的留言板系统,核心需要完成数据库设计、后端接口开发、前端页面展示三个部分,通过JDBC操作数据库存储留言数据,使用Servlet处理前端请求,最终实现一个可以发布和查看留言的基础系统。

在Java里怎样构建一个简单的留言板系统

数据库设计

首先需要创建存储留言数据的表,留言板核心需要记录留言内容、留言人、留言时间三个基础信息,对应的建表语句如下:

-- 创建留言表
CREATE TABLE message (
    id INT PRIMARY KEY AUTO_INCREMENT,
    content VARCHAR(500) NOT NULL COMMENT '留言内容',
    author VARCHAR(50) NOT NULL COMMENT '留言人',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '留言时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

后端核心功能实现

JDBC工具类封装

为了简化数据库操作,先封装一个JDBC工具类,负责获取数据库连接和释放资源,代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcUtil {
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/message_db?useSSL=false&serverTimezone=UTC";
    private static final String USER = "root";
    private static final String PASSWORD = "root";

    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 获取数据库连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }

    // 释放资源
    public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

留言实体类

创建对应的实体类来映射数据库表结构,方便后续数据传递:

import java.util.Date;

public class Message {
    private Integer id;
    private String content;
    private String author;
    private Date createTime;

    //  getter和setter方法
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

留言操作DAO类

封装留言的数据库操作逻辑,包括新增留言和查询所有留言两个核心方法:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MessageDao {
    // 新增留言
    public boolean addMessage(Message message) {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JdbcUtil.getConnection();
            String sql = "INSERT INTO message (content, author) VALUES (?, ?)";
            ps = conn.prepareStatement(sql);
            ps.setString(1, message.getContent());
            ps.setString(2, message.getAuthor());
            int rows = ps.executeUpdate();
            return rows > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        } finally {
            JdbcUtil.close(conn, ps, null);
        }
    }

    // 查询所有留言
    public List<Message> getAllMessages() {
        List<Message> messageList = new ArrayList<>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtil.getConnection();
            String sql = "SELECT id, content, author, create_time FROM message ORDER BY create_time DESC";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()) {
                Message message = new Message();
                message.setId(rs.getInt("id"));
                message.setContent(rs.getString("content"));
                message.setAuthor(rs.getString("author"));
                message.setCreateTime(rs.getTimestamp("create_time"));
                messageList.add(message);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(conn, ps, rs);
        }
        return messageList;
    }
}

Servlet接口开发

开发两个Servlet分别处理发布留言和查询留言的请求:

发布留言Servlet

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/addMessage")
public class AddMessageServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        String content = req.getParameter("content");
        String author = req.getParameter("author");
        if (content == null || content.trim().isEmpty() || author == null || author.trim().isEmpty()) {
            resp.getWriter().write("留言内容和留言人不能为空");
            return;
        }
        Message message = new Message();
        message.setContent(content);
        message.setAuthor(author);
        MessageDao messageDao = new MessageDao();
        boolean success = messageDao.addMessage(message);
        if (success) {
            resp.sendRedirect(req.getContextPath() + "/getAllMessages");
        } else {
            resp.getWriter().write("留言发布失败");
        }
    }
}

查询留言Servlet

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/getAllMessages")
public class GetAllMessagesServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        MessageDao messageDao = new MessageDao();
        List<Message> messageList = messageDao.getAllMessages();
        req.setAttribute("messageList", messageList);
        req.getRequestDispatcher("/message_list.jsp").forward(req, resp);
    }
}

前端页面实现

留言发布页面

创建add_message.jsp作为留言发布页面,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>发布留言</title>
</head>
<body>
    <h2>发布新留言</h2>
    <form action="${pageContext.request.contextPath}/addMessage" method="post">
        <p>
            留言人:<input type="text" name="author" required>
        </p>
        <p>
            留言内容:<textarea name="content" rows="5" cols="30" required></textarea>
        </p>
        <p>
            <input type="submit" value="发布留言">
            <a href="${pageContext.request.contextPath}/getAllMessages">查看所有留言</a>
        </p>
    </form>
</body>
</html>

留言列表页面

创建message_list.jsp作为留言展示页面,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>留言列表</title>
</head>
<body>
    <h2>所有留言</h2>
    <a href="${pageContext.request.contextPath}/add_message.jsp">发布新留言</a>
    <hr>
    <c:if test="${empty messageList}">
        <p>暂无留言</p>
    </c:if>
    <c:forEach items="${messageList}" var="message">
        <div style="border:1px solid #ccc; padding:10px; margin:10px 0;">
            <p>留言人:${message.author}</p>
            <p>留言内容:${message.content}</p>
            <p>留言时间:${message.createTime}</p>
        </div>
    </c:forEach>
</body>
</html>

部署运行说明

将上述代码部署到Tomcat等Servlet容器中,提前创建好对应的数据库和表,修改JdbcUtil中的数据库连接信息为实际的环境配置,启动容器后访问add_message.jsp页面即可使用留言板的发布和查看功能。如果需要扩展功能,可以在现有基础上增加留言删除、留言回复等逻辑,核心思路和上述实现方式一致。

Java留言板系统ServletMySQLJDBC修改时间:2026-06-13 21:45:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。