基于jsp的留言本要求使用dbutils,实现发表留言、回复留言、留言维护等功能
时间: 2024-03-21 19:43:44 浏览: 85
基于jsp的留言本系统
好的,下面是一个基于JSP和DBUtils的留言本示例,实现了发表留言、回复留言和留言维护等功能。
首先,在项目中引入DBUtils的jar包,可以在pom文件中添加以下依赖:
```xml
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
```
接着,在数据库中创建留言表:
```sql
CREATE TABLE `message` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
`create_time` datetime NOT NULL,
`reply_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
```
然后,创建一个Message类作为留言的数据模型:
```java
public class Message {
private int id;
private String title;
private String content;
private Date createTime;
private int replyId;
// getter and setter methods
}
```
接着,编写DAO类来实现对留言表的操作:
```java
public class MessageDao {
private QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
// 添加留言
public void addMessage(Message message) throws SQLException {
String sql = "INSERT INTO message (title, content, create_time, reply_id) VALUES (?, ?, ?, ?)";
Object[] params = {message.getTitle(), message.getContent(), message.getCreateTime(), message.getReplyId()};
queryRunner.update(sql, params);
}
// 根据id获取留言
public Message getMessageById(int id) throws SQLException {
String sql = "SELECT * FROM message WHERE id = ?";
return queryRunner.query(sql, new BeanHandler<>(Message.class), id);
}
// 获取留言列表
public List<Message> getMessageList() throws SQLException {
String sql = "SELECT * FROM message ORDER BY create_time DESC";
return queryRunner.query(sql, new BeanListHandler<>(Message.class));
}
// 根据id删除留言
public void deleteMessageById(int id) throws SQLException {
String sql = "DELETE FROM message WHERE id = ?";
queryRunner.update(sql, id);
}
}
```
在这里,我们使用DBUtils提供的QueryRunner类来执行SQL语句的查询和更新操作,并使用BeanHandler和BeanListHandler将查询结果转换为Java对象。
接着,编写JSP页面来实现留言本的功能:
1. 发表留言页面(message.jsp):
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>发表留言</title>
</head>
<body>
<h1>发表留言</h1>
<form action="addMessage.jsp" method="post">
标题:<input type="text" name="title"><br>
内容:<br>
<textarea name="content" rows="10" cols="50"></textarea><br>
<input type="submit" value="发表留言">
</form>
</body>
</html>
```
2. 处理发表留言请求的页面(addMessage.jsp):
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Date" %>
<%@ page import="com.example.Message" %>
<%@ page import="com.example.MessageDao" %>
<%@ page import="com.example.C3P0Utils" %>
<%
String title = request.getParameter("title");
String content = request.getParameter("content");
int replyId = Integer.parseInt(request.getParameter("reply_id"));
Message message = new Message();
message.setTitle(title);
message.setContent(content);
message.setCreateTime(new Date());
message.setReplyId(replyId);
MessageDao messageDao = new MessageDao();
messageDao.addMessage(message);
response.sendRedirect("messageList.jsp");
%>
```
在这里,我们从请求参数中获取留言的标题、内容和回复留言的id,然后创建一个Message对象并调用MessageDao的addMessage方法将留言保存到数据库中,并最终重定向到留言列表页面(messageList.jsp)。
3. 留言列表页面(messageList.jsp):
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="com.example.Message" %>
<%@ page import="com.example.MessageDao" %>
<%
MessageDao messageDao = new MessageDao();
List<Message> messageList = messageDao.getMessageList();
%>
<html>
<head>
<title>留言列表</title>
</head>
<body>
<h1>留言列表</h1>
<a href="message.jsp">发表留言</a>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>标题</th>
<th>内容</th>
<th>创建时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<%
for (Message message : messageList) {
%>
<tr>
<td><%= message.getId() %></td>
<td><%= message.getTitle() %></td>
<td><%= message.getContent() %></td>
<td><%= message.getCreateTime() %></td>
<td>
<a href="reply.jsp?id=<%= message.getId() %>">回复</a>
<a href="deleteMessage.jsp?id=<%= message.getId() %>">删除</a>
</td>
</tr>
<%
}
%>
</tbody>
</table>
</body>
</html>
```
在这里,我们调用MessageDao的getMessageList方法获取留言列表,并使用JSP的循环语句将留言列表渲染到页面上。
4. 回复留言页面(reply.jsp):
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.example.Message" %>
<%@ page import="com.example.MessageDao" %>
<%
int id = Integer.parseInt(request.getParameter("id"));
MessageDao messageDao = new MessageDao();
Message message = messageDao.getMessageById(id);
%>
<html>
<head>
<title>回复留言</title>
</head>
<body>
<h1>回复留言</h1>
<form action="addMessage.jsp" method="post">
标题:<input type="text" name="title"><br>
内容:<br>
<textarea name="content" rows="10" cols="50"></textarea><br>
<input type="hidden" name="reply_id" value="<%= message.getId() %>">
<input type="submit" value="回复留言">
</form>
</body>
</html>
```
在这里,我们从请求参数中获取回复留言的id,并调用MessageDao的getMessageById方法获取要回复的留言对象。然后,我们在表单中添加一个隐藏域来保存要回复的留言的id,并将表单的action属性设置为addMessage.jsp,以便在提交表单时将回复留言和原留言关联起来。
5. 处理删除留言请求的页面(deleteMessage.jsp):
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.example.MessageDao" %>
<%
int id = Integer.parseInt(request.getParameter("id"));
MessageDao messageDao = new MessageDao();
messageDao.deleteMessageById(id);
response.sendRedirect("messageList.jsp");
%>
```
在这里,我们从请求参数中获取要删除的留言的id,并调用MessageDao的deleteMessageById方法将留言从数据库中删除,并最终重定向到留言列表页面(messageList.jsp)。
至此,我们完成了基于JSP和DBUtils的留言本的实现,实现了发表留言、回复留言和留言维护等功能。
阅读全文