JSP(JavaServer Pages)是一种用于创建动态Web内容的Java技术。一个带有回复功能的留言板是一个常见的Web应用示例,它允许用户发布消息,并且其他用户可以对这些消息进行回复。
以下是一个简单的JSP留言板实现示例,包括留言和回复功能。
假设我们有两个表:messages
(存储留言)和replies
(存储回复)。
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT NOT NULL,
user VARCHAR(255),
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE replies (
id INT AUTO_INCREMENT PRIMARY KEY,
message_id INT,
content TEXT NOT NULL,
user VARCHAR(255),
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (message_id) REFERENCES messages(id)
);
index.jsp
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>留言板</title>
</head>
<body>
<h1>留言板</h1>
<form action="submit_message.jsp" method="post">
内容: <textarea name="content"></textarea><br>
用户名: <input type="text" name="user"><br>
<input type="submit" value="提交">
</form>
<h2>留言列表</h2>
<%
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM messages ORDER BY timestamp DESC");
while (rs.next()) {
%>
<div>
<p><%= rs.getString("user") %> - <%= rs.getTimestamp("timestamp") %></p>
<p><%= rs.getString("content") %></p>
<a href="reply.jsp?id=<%= rs.getInt("id") %>">回复</a>
</div>
<%
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
%>
</body>
</html>
reply.jsp
<%@ page import="java.sql.*" %>
<html>
<head>
<title>回复留言</title>
</head>
<body>
<h1>回复留言</h1>
<%
int messageId = Integer.parseInt(request.getParameter("id"));
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
stmt = conn.prepareStatement("SELECT * FROM messages WHERE id = ?");
stmt.setInt(1, messageId);
rs = stmt.executeQuery();
if (rs.next()) {
%>
<div>
<p><%= rs.getString("user") %> - <%= rs.getTimestamp("timestamp") %></p>
<p><%= rs.getString("content") %></p>
</div>
<%
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
%>
<form action="submit_reply.jsp" method="post">
<input type="hidden" name="message_id" value="<%= messageId %>">
内容: <textarea name="content"></textarea><br>
用户名: <input type="text" name="user"><br>
<input type="submit" value="提交回复">
</form>
</body>
</html>
submit_message.jsp
<%@ page import="java.sql.*" %>
<%
String content = request.getParameter("content");
String user = request.getParameter("user");
Connection conn = null;
PreparedStatement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
stmt = conn.prepareStatement("INSERT INTO messages (content, user) VALUES (?, ?)");
stmt.setString(1, content);
stmt.setString(2, user);
stmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
response.sendRedirect("index.jsp");
%>
submit_reply.jsp
<%@ page import="java.sql.*" %>
<%
int messageId = Integer.parseInt(request.getParameter("message_id"));
String content = request.getParameter("content");
String user = request.getParameter("user");
Connection conn = null;
PreparedStatement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
stmt = conn.prepareStatement("INSERT INTO replies (message_id, content, user) VALUES (?, ?, ?)");
stmt.setInt(1, messageId);
stmt.setString(2, content);
stmt.setString(3, user);
stmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
response.sendRedirect("reply.jsp?id=" + messageId);
%>
PreparedStatement
代替Statement
,避免SQL注入。通过以上示例和解决方案,你可以构建一个基本的带回复功能的留言板,并解决一些常见问题。
领取专属 10元无门槛券
手把手带您无忧上云