帮我写一个基于JSP的留言本
时间: 2023-08-28 15:31:21 浏览: 88
基于jsp我的留言本
很抱歉,作为AI语言模型,我无法完成代码实现的任务。但是,我可以给您提供一个基于JSP的留言本的大体框架和实现步骤,供您参考:
1. 创建数据库表
首先需要创建一个数据库表来存储留言信息,包括留言ID、留言内容、留言时间等字段。可以使用如下的SQL语句来创建表:
```
CREATE TABLE messages (
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(255) NOT NULL,
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
```
2. 编写JSP页面
在Web应用的WebContent目录下,创建一个名为“message.jsp”的JSP页面,用来显示留言列表和留言表单。页面中需要包含以下几个部分:
- 留言列表:用来显示所有已发布的留言。
- 留言表单:用来让用户输入留言内容并提交。
- 分页功能:用来分页显示留言列表。
可以使用如下的代码来实现:
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言本</title>
</head>
<body>
<h1>留言本</h1>
<!-- 留言列表 -->
<c:forEach var="message" items="${messages}">
<p><strong>${message.id}</strong> ${message.content} <em>${message.create_time}</em></p>
</c:forEach>
<!-- 留言表单 -->
<form action="message" method="post">
<textarea name="content" rows="5" cols="50"></textarea><br>
<input type="submit" value="发布留言">
</form>
<!-- 分页功能 -->
<c:if test="${pageCount > 1}">
<p>
<c:if test="${currentPage > 1}">
<a href="?page=${currentPage - 1}">上一页</a>
</c:if>
<c:forEach var="page" begin="1" end="${pageCount}">
<c:choose>
<c:when test="${page == currentPage}">
<b>${page}</b>
</c:when>
<c:otherwise>
<a href="?page=${page}">${page}</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${currentPage < pageCount}">
<a href="?page=${currentPage + 1}">下一页</a>
</c:if>
</p>
</c:if>
</body>
</html>
```
3. 编写Servlet
在Web应用的src目录下,创建一个名为“MessageServlet”的Servlet,用来处理留言表单提交操作,并将留言内容存储到数据库中。Servlet中需要包含以下几个部分:
- 处理表单提交操作:用来获取用户输入的留言内容。
- 存储留言到数据库:用来将留言内容存储到数据库中。
- 显示留言列表:用来从数据库中读取留言内容,并将留言列表传递给JSP页面进行显示。
可以使用如下的代码来实现:
```java
package com.example;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
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 javax.sql.DataSource;
@WebServlet("/message")
public class MessageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private DataSource dataSource;
public void init() throws ServletException {
try {
Context ctx = new InitialContext();
dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/mydb");
} catch (NamingException e) {
throw new ServletException("Error looking up DataSource", e);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String content = request.getParameter("content");
if (content != null && !content.trim().isEmpty()) {
try (Connection conn = dataSource.getConnection()) {
String sql = "INSERT INTO messages (content) VALUES (?)";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, content);
stmt.executeUpdate();
}
} catch (SQLException e) {
throw new ServletException("Error storing message", e);
}
}
response.sendRedirect("message");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int currentPage = 1;
String pageParam = request.getParameter("page");
if (pageParam != null && pageParam.matches("\\d+")) {
currentPage = Integer.parseInt(pageParam);
}
List<Message> messages = new ArrayList<>();
int totalCount = 0;
int pageSize = 10;
int pageCount = 0;
try (Connection conn = dataSource.getConnection()) {
String sql = "SELECT COUNT(*) FROM messages";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
totalCount = rs.getInt(1);
}
}
}
if (totalCount > 0) {
pageCount = (int) Math.ceil((double) totalCount / pageSize);
if (currentPage < 1) {
currentPage = 1;
}
if (currentPage > pageCount) {
currentPage = pageCount;
}
int offset = (currentPage - 1) * pageSize;
sql = "SELECT * FROM messages ORDER BY create_time DESC LIMIT ?, ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, offset);
stmt.setInt(2, pageSize);
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
Message message = new Message();
message.setId(rs.getInt("id"));
message.setContent(rs.getString("content"));
message.setCreateTime(rs.getTimestamp("create_time"));
messages.add(message);
}
}
}
}
} catch (SQLException e) {
throw new ServletException("Error retrieving messages", e);
}
request.setAttribute("messages", messages);
request.setAttribute("currentPage", currentPage);
request.setAttribute("pageCount", pageCount);
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
}
```
4. 配置数据库连接池
在Web应用的META-INF目录下,创建一个名为“context.xml”的文件,用来配置数据库连接池。可以使用如下的代码来实现:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="myuser" password="mypassword" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"/>
</Context>
```
5. 部署Web应用
将上面编写的JSP页面和Servlet代码放到Web应用的对应目录下,然后将Web应用打包成WAR文件,部署到Tomcat服务器中即可。
以上是一个基于JSP的留言本的大体框架和实现步骤,具体实现过程需要根据具体需求进行调整和优化。
阅读全文