留言板怎么做Java?

环境准备
在开始开发留言板之前,我们需要准备以下环境:
- JDK:Java开发工具包,确保安装最新版本的JDK。
- IDE:集成开发环境,如Eclipse、IntelliJ IDEA等,用于编写和调试代码。
- Web服务器:如Apache Tomcat,用于部署和运行Java Web应用程序。
技术选型
- Servlet:Java Web技术之一,用于处理客户端请求并生成响应。
- JSP(JavaServer Pages):Java Web技术之一,用于创建动态网页。
- HTML/CSS/JavaScript:用于创建网页的静态内容和样式。
- MySQL:关系型数据库,用于存储留言数据。
项目结构
- src:存放Java源代码。
- com:项目名称。
- demo:模块名称。
- controller:控制器类,处理用户请求。
- model:数据模型类,表示留言数据。
- service:业务逻辑层,处理业务逻辑。
- dao:数据访问层,与数据库交互。
- demo:模块名称。
- com:项目名称。
- webapp:存放Web资源。
- WEB-INF:
- web.xml:配置文件,用于配置Servlet和过滤器。
- views:存放JSP页面。
- images:存放图片资源。
- js:存放JavaScript脚本。
- css:存放CSS样式。
- index.jsp:主页。
- WEB-INF:
实现步骤
创建项目
使用IDE创建一个Java Web项目,并选择Servlet和JSP作为技术选型。

配置数据库
创建一个MySQL数据库,并创建一个名为message_board的表,用于存储留言数据。
CREATE TABLE `message_board` ( `id` INT NOT NULL AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL, `content` TEXT NOT NULL, `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) );
编写数据访问层(DAO)
在com.demo.dao包下创建MessageBoardDao接口和MessageBoardDaoImpl实现类,用于与数据库交互。
// MessageBoardDao.java
package com.demo.dao;
public interface MessageBoardDao {
void addMessage(String username, String content);
List<Message> listMessages();
}
// MessageBoardDaoImpl.java
package com.demo.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 MessageBoardDaoImpl implements MessageBoardDao {
private Connection connection;
public MessageBoardDaoImpl(Connection connection) {
this.connection = connection;
}
@Override
public void addMessage(String username, String content) {
String sql = "INSERT INTO message_board (username, content) VALUES (?, ?)";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, username);
statement.setString(2, content);
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public List<Message> listMessages() {
List<Message> messages = new ArrayList<>();
String sql = "SELECT * FROM message_board ORDER BY create_time DESC";
try (PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
Message message = new Message();
message.setId(resultSet.getInt("id"));
message.setUsername(resultSet.getString("username"));
message.setContent(resultSet.getString("content"));
message.setCreateTime(resultSet.getTimestamp("create_time"));
messages.add(message);
}
} catch (SQLException e) {
e.printStackTrace();
}
return messages;
}
}
编写业务逻辑层(Service)
在com.demo.service包下创建MessageBoardService接口和MessageBoardServiceImpl实现类,用于处理业务逻辑。
// MessageBoardService.java
package com.demo.service;
import java.util.List;
public interface MessageBoardService {
void addMessage(String username, String content);
List<Message> listMessages();
}
// MessageBoardServiceImpl.java
package com.demo.service;
import com.demo.dao.MessageBoardDao;
import com.demo.dao.MessageBoardDaoImpl;
import com.demo.model.Message;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MessageBoardServiceImpl implements MessageBoardService {
private MessageBoardDao messageBoardDao;
public MessageBoardServiceImpl() {
messageBoardDao = new MessageBoardDaoImpl(getConnection());
}
private Connection getConnection() {
String url = "jdbc:mysql://localhost:3306/message_board?useSSL=false";
String username = "root";
String password = "password";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
return DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public void addMessage(String username, String content) {
messageBoardDao.addMessage(username, content);
}
@Override
public List<Message> listMessages() {
return messageBoardDao.listMessages();
}
}
编写控制器(Controller)

在com.demo.controller包下创建MessageBoardController类,用于处理用户请求。
// MessageBoardController.java
package com.demo.controller;
import com.demo.service.MessageBoardService;
import com.demo.model.Message;
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("/MessageBoardServlet")
public class MessageBoardController extends HttpServlet {
private MessageBoardService messageBoardService;
public MessageBoardController() {
messageBoardService = new MessageBoardServiceImpl();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Message> messages = messageBoardService.listMessages();
request.setAttribute("messages", messages);
request.getRequestDispatcher("/WEB-INF/views/index.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String content = request.getParameter("content");
messageBoardService.addMessage(username, content);
response.sendRedirect(request.getContextPath() + "/MessageBoardServlet");
}
}
编写JSP页面
在WEB-INF/views目录下创建index.jsp页面,用于显示留言板。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>留言板</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="container">
<h1>留言板</h1>
<form action="MessageBoardServlet" method="post">
<div class="form-group">
<label for="username">用户名:</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="form-group">
<label for="content">留言内容:</label>
<textarea class="form-control" id="content" name="content" rows="3" required></textarea>
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
<hr>
<div class="messages">
<h3>最新留言:</h3>
<ul>
<c:forEach var="message" items="${messages}">
<li>
<span>${message.username}</span>:
<span>${message.content}</span>
<span>${message.createTime}</span>
</li>
</c:forEach>
</ul>
</div>
</div>
<script src="js/script.js"></script>
</body>
</html>
配置web.xml
在WEB-INF/web.xml文件中配置Servlet。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>MessageBoardServlet</servlet-name>
<servlet-class>com.demo.controller.MessageBoardController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MessageBoardServlet</servlet-name>
<url-pattern>/MessageBoardServlet</url-pattern>
</servlet-mapping>
</web-app>
至此,一个简单的留言板就已经完成了,您可以根据自己的需求,对代码进行优化和扩展。


















