设计一个jsp文件,实现留言板功能
时间: 2024-05-07 15:17:48 浏览: 109
好的,留言板功能一般需要数据库的支持,我们先来设计一下数据库表。
假设我们需要存储留言的用户名、留言内容和留言时间,我们可以创建一个名为 message 的表,表结构如下:
```
CREATE TABLE message (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
content TEXT,
create_time DATETIME
);
```
接下来,我们可以创建一个 JSP 页面,实现留言板的功能。下面是一个简单的实现,代码中使用了 JSTL 和 EL 表达式。
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
</head>
<body>
<h1>留言板</h1>
<h2>发表留言</h2>
<<form action="message.jsp" method="post">
<label for="username">用户名:</label>
<input type="text" name="username" id="username"><br>
<label for="content">留言内容:</label>
<textarea name="content" id="content" rows="5"></textarea><br>
<button type="submit">发表留言</button>
</form>
<hr>
<h2>留言列表</h2>
<c:forEach items="${messages}" var="message">
<p>${message.username} 于 ${message.create_time} 留言:</p>
<p>${message.content}</p>
<hr>
</c:forEach>
</body>
</html>
```
在 JSP 页面中,我们使用了一个表单来提交留言。表单中包含了用户名和留言内容两个字段,并且使用了 POST 方法提交表单。
在页面的下半部分,我们使用了 JSTL 的 forEach 标签来循环遍历留言列表,使用 EL 表达式来显示留言的用户名、留言时间和留言内容。
接下来,我们需要编写 message.jsp 文件来处理表单提交和查询留言的逻辑。下面是一个简单的实现。
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.sql.*,java.util.*" %>
<%
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
if (request.getMethod().equals("POST")) {
String username = request.getParameter("username");
String content = request.getParameter("content");
Date create_time = new Date();
stmt = conn.prepareStatement("INSERT INTO message(username, content, create_time) VALUES (?, ?, ?)");
stmt.setString(1, username);
stmt.setString(2, content);
stmt.setTimestamp(3, new Timestamp(create_time.getTime()));
stmt.executeUpdate();
}
stmt = conn.prepareStatement("SELECT * FROM message ORDER BY create_time DESC");
rs = stmt.executeQuery();
List<Map<String, Object>> messages = new ArrayList<>();
while (rs.next()) {
Map<String, Object> message = new HashMap<>();
message.put("username", rs.getString("username"));
message.put("content", rs.getString("content"));
message.put("create_time", rs.getTimestamp("create_time"));
messages.add(message);
}
request.setAttribute("messages", messages);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
%>
<jsp:forward page="message_board.jsp"></jsp:forward>
```
在 message.jsp 文件中,我们首先定义了数据库的连接参数,并且使用 JDBC 连接到数据库。然后,我们通过 request.getMethod() 方法判断当前请求的方法是否为 POST,如果是 POST 方法,就获取表单提交的用户名、留言内容和留言时间,并且插入到数据库的 message 表中。
接下来,我们通过执行 SQL 查询语句,获取留言列表,并且将留言列表保存到一个 List<Map<String, Object>> 对象中。最后,我们使用 request.setAttribute() 方法将留言列表保存到 request 对象中,并且通过 jsp:forward 标签跳转回到 message_board.jsp 页面。在 message_board.jsp 页面中,我们就可以使用 JSTL 和 EL 表达式来显示留言列表了。
阅读全文