java实现留言板功能实例

Java实现留言板功能实例

在Java Web开发中,留言板是一个常见的功能。本文将介绍如何使用Java实现留言板功能。

准备工作

首先要准备的是Java Web开发的基础知识,包括Java Servlet、JSP、HTML、CSS和数据库MySQL的使用。

创建数据库

使用MySQL创建一个名为“message_board”的数据库,其中包含一个名为“message”的表,该表包含id、name、email、subject和message字段。

CREATE DATABASE message_board;

USE message_board;

CREATE TABLE message (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50) NOT NULL,
  subject VARCHAR(100) NOT NULL,
  message TEXT NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

编写Java Servlet

创建一个名为MessageServlet的Java Servlet,用于处理HTTP请求和响应。使用doGet方法处理GET请求,使用doPost方法处理POST请求。

在doGet方法中,获取数据库中所有留言,并将其传递到JSP页面进行展示。

@WebServlet("/MessageServlet")
public class MessageServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private MessageDao messageDao;

    public MessageServlet() {
        super();
        messageDao = new MessageDao();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        List<Message> messages = messageDao.getAllMessages();
        request.setAttribute("messages", messages);
        request.getRequestDispatcher("message.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String name = request.getParameter("name");
        String email = request.getParameter("email");
        String subject = request.getParameter("subject");
        String message = request.getParameter("message");
        messageDao.addMessage(name, email, subject, message);
        doGet(request, response);
    }
}

编写JSP页面

创建一个名为message.jsp的JSP页面,用于展示所有留言和添加新留言。使用JSTL标签库和EL表达式获取Servlet传递的留言列表,并使用HTML和CSS进行样式美化和交互。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
<style>
body {
    font-family: Arial;
}

form {
    margin-bottom: 20px;
}

label {
    display: block;
    font-size: 14px;
    font-weight: bold;
    margin-bottom: 5px;
}

input[type="text"], textarea {
    width: 100%;
    padding: 10px;
    border: 1px solid #ccc;
    border-radius: 5px;
    margin-bottom: 20px;
}

button[type="submit"] {
    background-color: #4CAF50;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

table {
    border-collapse: collapse;
    width: 100%;
}

th, td {
    text-align: left;
    padding: 8px;
}

th {
    background-color: #4CAF50;
    color: white;
}

tr:nth-child(even) {
    background-color: #f2f2f2;
}
</style>
</head>
<body>
    <form method="post" action="MessageServlet">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name" required>
        <label for="email">邮箱:</label>
        <input type="text" id="email" name="email" required>
        <label for="subject">主题:</label>
        <input type="text" id="subject" name="subject" required>
        <label for="message">留言:</label>
        <textarea id="message" name="message" rows="10" required></textarea>
        <button type="submit">提交</button>
    </form>
    <table>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>邮箱</th>
            <th>主题</th>
            <th>留言</th>
        </tr>
        <c:forEach var="message" items="${messages}">
            <tr>
                <td>${message.id}</td>
                <td>${message.name}</td>
                <td>${message.email}</td>
                <td>${message.subject}</td>
                <td>${message.message}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

创建数据访问对象

创建一个名为MessageDao的类,用于管理数据库中的留言。使用JDBC API连接数据库,并提供添加留言和获取所有留言的方法。

public class MessageDao {
    private final String jdbcUrl = "jdbc:mysql://localhost:3306/message_board?useSSL=false&serverTimezone=UTC";
    private final String jdbcUser = "root";
    private final String jdbcPassword = "123456";
    private Connection conn;

    public MessageDao() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword);
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }

    public void addMessage(String name, String email, String subject, String message) {
        try {
            PreparedStatement stmt = conn.prepareStatement("INSERT INTO message (name, email, subject, message) VALUES (?, ?, ?, ?)");
            stmt.setString(1, name);
            stmt.setString(2, email);
            stmt.setString(3, subject);
            stmt.setString(4, message);
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public List<Message> getAllMessages() {
        List<Message> messages = new ArrayList<>();
        try {
            PreparedStatement stmt = conn.prepareStatement("SELECT * FROM message");
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                Message message = new Message();
                message.setId(rs.getInt("id"));
                message.setName(rs.getString("name"));
                message.setEmail(rs.getString("email"));
                message.setSubject(rs.getString("subject"));
                message.setMessage(rs.getString("message"));
                messages.add(message);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return messages;
    }
}

运行程序

将编写好的代码打包成war文件,并部署到Tomcat服务器上,访问http://localhost:8080/message_board/MessageServlet,即可使用留言板功能。

示例说明

示例一

假设有用户A在留言板上留言“你们的网站做得很好”,此时MessageServlet收到POST请求,将留言存入数据库,并从数据库中获取所有留言,传递到message.jsp页面,以供浏览器展示。用户B在浏览器上看到留言板页面,可以看到用户A的留言,以及自己输入新留言的表单。

示例二

假设有用户C在浏览器上看到留言板页面,可以看到所有留言,包括用户A和用户B的留言。此时MessageServlet收到GET请求,从数据库中获取所有留言,以及存在request请求中,传递到message.jsp页面,以供浏览器展示。用户C可以看到所有留言内容,并进行更多的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现留言板功能实例 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • MyBatis 如何简化的 JDBC(思路详解)

    大家好,这里是网站的作者,请听我详细讲解一下 “MyBatis 如何简化的 JDBC(思路详解)” 的完整攻略。 1. MyBatis简介 MyBatis是一款非常流行的轻量级Java持久层框架,它可以将JDBC的操作进行封装,简化了JDBC代码的编写,使得开发人员不用再关注过多的JDBC细节,而是更加专注于业务逻辑的处理。 2. MyBatis如何简化JD…

    Java 2023年5月20日
    00
  • Java面向对象基础详解

    Java面向对象基础详解 什么是面向对象编程? 面向对象编程是一种计算机编程方式,它通过将数据和方法绑定在一起的方式来组织代码。在Java中,一切都是对象,每个对象都有状态(属性)和行为(方法)。对象之间通过消息传递来完成相互交互,这也是面向对象编程的核心思想。 面向对象编程的优点 提高代码的可维护性和可重用性 增加代码的灵活性和扩展性 更好地组织代码 面向…

    Java 2023年5月23日
    00
  • java动态规划算法——硬币找零问题实例分析

    Java 动态规划算法——硬币找零问题实例分析 简介 硬币找零问题是一类非常经典的问题,主要是如何计算出需要多少硬币才能凑够给定的金额。动态规划是解决硬币找零问题的一种常用算法。本文将介绍动态规划算法的工作原理及其在硬币找零问题中的应用。 动态规划算法 动态规划算法(Dynamic Programming)是一种解决问题的思想,它将问题拆分成若干个子问题,并…

    Java 2023年5月26日
    00
  • Java线程池必知必会知识点总结

    Java线程池必知必会知识点总结 在并发编程中,线程池是一种重要的资源管理方式。线程池可以管理和执行多个线程,从而提高程序的性能和效率,同时还能避免线程创建和销毁的开销。 本文将介绍Java线程池的相关知识点,包括线程池的基本概念、实现原理、使用方法和注意事项。 线程池的基本概念 Java中的线程池主要有两种实现方式:FixedThreadPool和Cach…

    Java 2023年5月20日
    00
  • 一篇文章带你入门Java方法详解

    一篇文章带你入门Java方法详解 Java是一门面向对象的编程语言,方法是Java中基本的编程元素之一。方法是一个可以重复使用的代码块,它可以帮助程序员避免重复书写相同的代码,提高代码的复用性和可维护性。如果你正在学习Java,那么方法绝对是必须掌握的知识点之一。本文将通过详细的实例讲解Java方法的基础知识。 Java方法的定义和语法 Java方法是指在类…

    Java 2023年5月19日
    00
  • spring学习之@SessionAttributes实例解析

    Spring学习之@SessionAttributes实例解析 简介 在Spring中,@SessionAttributes注解用于将模型属性存储在HTTP会话中。Spring会话中的模型属性是Web应用程序中处理流程和视图渲染的重要组成部分。本文将介绍@SessionAttributes注解的使用方法,并提供两个示例说明。 @SessionAttribut…

    Java 2023年6月15日
    00
  • 对象的创建过程包括哪些步骤?

    以下是关于“对象的创建过程包括哪些步骤?”的完整使用攻略: 1. 对象的创建过程 在Java中,对象的创建过程包括以下几个步骤: 类加载:在Java程序运行,JVM会将类的字节码加载到内存中,并对类进行解析和验证。 分配内存:在类加载完成后,VM会在堆内存中为对象配一块连续的内存空间。在分配内存时,JVM会根据对象的大小和内存分配策略来确定内存分配方式。 初…

    Java 2023年5月12日
    00
  • SpringBoot使用freemarker导出word文件方法详解

    SpringBoot使用freemarker导出word文件方法详解 在SpringBoot框架中,使用freemarker库可以轻松地将数据和模板结合起来生成各种文件类型。其中,导出word文件是一个常见的需求,本文将详细介绍SpringBoot如何使用freemarker导出word文件。 步骤一:添加依赖 首先,在pom.xml文件中添加freemar…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部