JSP(JavaServer Pages)留言板回复功能是一个常见的Web应用示例,它允许用户在网页上留言,并且其他用户可以对这些留言进行回复。下面我将详细介绍JSP留言板回复的基础概念、优势、类型、应用场景,以及可能遇到的问题和解决方法。
JSP是一种服务器端技术,用于创建动态网页。它允许在HTML或XML等静态页面中嵌入Java代码片段和表达式,从而实现动态内容的生成。留言板回复功能通常涉及数据库操作、表单处理和会话管理。
以下是一个简单的JSP留言板回复功能的示例代码:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
parent_id INT DEFAULT NULL,
content TEXT NOT NULL,
user_name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
<%@ page import="java.sql.*" %>
<html>
<head>
<title>留言板</title>
</head>
<body>
<h1>留言板</h1>
<form action="submit_message.jsp" method="post">
<textarea name="content"></textarea><br>
<input type="submit" value="提交留言">
</form>
<%
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", "password");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM messages ORDER BY created_at DESC");
while (rs.next()) {
int id = rs.getInt("id");
int parentId = rs.getInt("parent_id");
String content = rs.getString("content");
String userName = rs.getString("user_name");
%>
<div>
<strong><%= userName %></strong> 于 <%= rs.getTimestamp("created_at") %><br>
<%= content %>
<% if (parentId == null) { %>
<form action="reply_message.jsp" method="post">
<input type="hidden" name="parent_id" value="<%= id %>">
<textarea name="reply_content"></textarea><br>
<input type="submit" value="回复">
</form>
<% } %>
</div>
<%
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
%>
</body>
</html>
<%@ page import="java.sql.*" %>
<%
String content = request.getParameter("content");
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
pstmt = conn.prepareStatement("INSERT INTO messages (content, user_name) VALUES (?, ?)");
pstmt.setString(1, content);
pstmt.setString(2, "匿名用户"); // 这里可以改为获取当前登录用户的用户名
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
response.sendRedirect("index.jsp");
%>
<%@ page import="java.sql.*" %>
<%
int parentId = Integer.parseInt(request.getParameter("parent_id"));
String replyContent = request.getParameter("reply_content");
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
pstmt = conn.prepareStatement("INSERT INTO messages (parent_id, content, user_name) VALUES (?, ?, ?)");
pstmt.setInt(1, parentId);
pstmt.setString(2, replyContent);
pstmt.setString(3, "匿名用户"); // 这里可以改为获取当前登录用户的用户名
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
response.sendRedirect("index.jsp");
%>
PreparedStatement
而不是Statement
来防止SQL注入。response.sendRedirect
)而不是转发(RequestDispatcher
)来避免表单重复提交。HttpSession
来管理用户会话状态。通过以上步骤和代码示例,你可以实现一个基本的JSP留言板回复功能,并解决常见的开发和运行时问题。
领取专属 10元无门槛券
手把手带您无忧上云