用JSP+Servlet+JDBC实现的一个留言本
时间: 2024-01-16 12:03:15 浏览: 87
好的,这是一个比较基础的项目,留言本可以用来让用户在上面留下自己的留言,并且可以查看已经发布的留言。下面是实现留言本的大致步骤:
1. 创建一个数据库表来存储留言信息,包括留言ID、留言内容、留言时间等字段。
2. 使用JSP页面创建留言本的前端界面,包括留言信息的展示、留言表单的提交等功能。
3. 使用Servlet处理留言表单的提交,将留言信息存储到数据库中。同时,还需要编写查询数据库并展示留言信息的Servlet。
4. 使用JDBC连接数据库,操作留言信息的增删改查等功能。
具体实现细节可以参考一些JSP+Servlet+JDBC实现留言本的教程或者案例。
相关问题
用JSP+Servlet+JDBC实现的一个留言本写代码,详细一点
好的,下面是一个使用JSP+Servlet+JDBC实现的留言本的示例代码:
1. 创建数据库表
首先,我们需要创建一个数据库表来存储留言信息。可以使用如下的SQL语句创建一个名为message_board的表:
```sql
CREATE TABLE message_board (
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
message TEXT NOT NULL,
create_time DATETIME NOT NULL,
PRIMARY KEY (id)
);
```
2. 创建JSP页面
接下来,我们可以创建一个JSP页面来展示留言信息和留言表单。可以使用如下的代码创建一个名为message_board.jsp的页面:
```html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言本</title>
</head>
<body>
<h1>留言板</h1>
<%-- 留言展示区域 --%>
<hr>
<h3>留言列表</h3>
<ul>
<%-- 使用JSP标签库遍历留言信息 --%>
<c:forEach var="message" items="${messages}">
<li><strong>${message.username}</strong> 在 ${message.create_time} 留言:<br>${message.message}</li>
</c:forEach>
</ul>
<hr>
<%-- 留言表单区域 --%>
<h3>我要留言</h3>
<form action="${pageContext.request.contextPath}/message" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>留言内容:</td>
<td><textarea name="message" rows="5" cols="50"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
```
在上面的代码中,我们使用了JSP标签库来遍历留言信息,其中messages是一个List类型的变量,存储了从数据库中查询出来的留言信息。
同时,我们还创建了一个留言表单,用于用户输入留言信息并提交到后台。
3. 创建Servlet
接下来,我们可以创建一个Servlet来处理留言表单的提交和查询留言信息的请求。可以使用如下的代码创建一个名为MessageServlet的Servlet:
```java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/message")
public class MessageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/message_board?useSSL=false&characterEncoding=UTF-8";
private static final String JDBC_USERNAME = "root";
private static final String JDBC_PASSWORD = "root";
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取留言信息
String username = request.getParameter("username");
String message = request.getParameter("message");
// 将留言信息保存到数据库中
try {
// 加载JDBC驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库连接
Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
// 插入留言信息
String sql = "INSERT INTO message_board (username, message, create_time) VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, message);
pstmt.setTimestamp(3, new Timestamp(new Date().getTime()));
pstmt.executeUpdate();
// 关闭资源
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
// 重定向到留言板页面,刷新留言列表
response.sendRedirect(request.getContextPath() + "/message_board.jsp");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 查询数据库中的留言列表
List<Message> messages = new ArrayList<>();
try {
// 加载JDBC驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库连接
Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
// 查询留言列表
String sql = "SELECT * FROM message_board ORDER BY create_time DESC";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Message message = new Message();
message.setId(rs.getInt("id"));
message.setUsername(rs.getString("username"));
message.setMessage(rs.getString("message"));
message.setCreateTime(rs.getTimestamp("create_time"));
messages.add(message);
}
// 关闭资源
rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
// 将留言列表存入request中,用于在JSP页面中展示
request.setAttribute("messages", messages);
// 转发到留言板页面
request.getRequestDispatcher("/message_board.jsp").forward(request, response);
}
}
```
在上面的代码中,我们实现了doPost方法来处理留言表单的提交请求。首先,我们从request中获取到留言信息,然后使用JDBC将留言信息插入到数据库中。最后,我们重定向到留言板页面,刷新留言列表。
同时,我们还实现了doGet方法来处理查询留言信息的请求。我们使用JDBC从数据库中查询留言列表,并将留言列表存入request中,用于在JSP页面中展示。
4. 创建JavaBean
最后,我们还需要创建一个JavaBean来表示留言信息,可以使用如下的代码创建一个名为Message的JavaBean:
```java
import java.sql.Timestamp;
public class Message {
private int id;
private String username;
private String message;
private Timestamp create_time;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Timestamp getCreateTime() {
return create_time;
}
public void setCreateTime(Timestamp create_time) {
this.create_time = create_time;
}
}
```
在上面的代码中,我们定义了一个Message类,包含留言的id、用户名、留言内容和创建时间等属性。同时,我们还提供了getter和setter方法,用于获取和设置属性值。
用JSP+Servlet+JDBC实现的一个留言本写代码要求有登陆注册功能,可以连接数据库,详细一点
好的,下面是一个简单的留言本的JSP+Servlet+JDBC实现代码,包括注册、登陆、留言和查询功能。
首先,需要创建一个数据库,包含两个表格:用户表和留言表。
用户表:
```sql
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
留言表:
```sql
CREATE TABLE `message` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`content` varchar(255) NOT NULL,
`time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
接下来,创建一个JavaBean类User,包含id、username和password属性,以及对应的getter和setter方法。同理,创建一个JavaBean类Message,包含id、username、content和time属性,以及对应的getter和setter方法。
然后,创建一个UserDao类,用于操作用户表。包括注册、登陆和查询用户信息的方法。
```java
public class UserDao {
public boolean register(User user) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = DBUtil.getConnection();
String sql = "INSERT INTO user(username,password) VALUES(?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
int result = ps.executeUpdate();
if (result > 0) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, ps, null);
}
return false;
}
public User login(String username, String password) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
String sql = "SELECT * FROM user WHERE username=? AND password=?";
ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
rs = ps.executeQuery();
if (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, ps, rs);
}
return null;
}
public User getUserById(int id) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
String sql = "SELECT * FROM user WHERE id=?";
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
rs = ps.executeQuery();
if (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, ps, rs);
}
return null;
}
}
```
接着,创建一个MessageDao类,用于操作留言表。包括添加留言和查询所有留言的方法。
```java
public class MessageDao {
public boolean addMessage(Message message) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = DBUtil.getConnection();
String sql = "INSERT INTO message(username,content,time) VALUES(?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, message.getUsername());
ps.setString(2, message.getContent());
ps.setTimestamp(3, new Timestamp(message.getTime().getTime()));
int result = ps.executeUpdate();
if (result > 0) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, ps, null);
}
return false;
}
public List<Message> getAllMessages() {
List<Message> list = new ArrayList<>();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
String sql = "SELECT * FROM message ORDER BY time DESC";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Message message = new Message();
message.setId(rs.getInt("id"));
message.setUsername(rs.getString("username"));
message.setContent(rs.getString("content"));
message.setTime(new Date(rs.getTimestamp("time").getTime()));
list.add(message);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(conn, ps, rs);
}
return list;
}
}
```
最后,创建一个Servlet类MessageServlet,处理用户的请求。包括注册、登陆、添加留言和查询所有留言的方法。
```java
public class MessageServlet extends HttpServlet {
UserDao userDao = new UserDao();
MessageDao messageDao = new MessageDao();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
if ("logout".equals(action)) {
req.getSession().invalidate();
resp.sendRedirect("index.jsp");
return;
}
List<Message> list = messageDao.getAllMessages();
req.setAttribute("list", list);
req.getRequestDispatcher("message.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
if ("register".equals(action)) {
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
if (userDao.register(user)) {
resp.sendRedirect("index.jsp");
} else {
req.setAttribute("message", "注册失败,请重试!");
req.getRequestDispatcher("register.jsp").forward(req, resp);
}
} else if ("login".equals(action)) {
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = userDao.login(username, password);
if (user != null) {
req.getSession().setAttribute("user", user);
resp.sendRedirect("message?action=list");
} else {
req.setAttribute("message", "用户名或密码错误!");
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
} else if ("add".equals(action)) {
String content = req.getParameter("content");
User user = (User) req.getSession().getAttribute("user");
Message message = new Message();
message.setUsername(user.getUsername());
message.setContent(content);
message.setTime(new Date());
if (messageDao.addMessage(message)) {
resp.sendRedirect("message?action=list");
} else {
req.setAttribute("message", "留言失败,请重试!");
req.getRequestDispatcher("message.jsp").forward(req, resp);
}
}
}
}
```
其中,DBUtil是一个工具类,用于获取数据库连接和关闭资源。可以在此处忽略。
这样,一个简单的留言本的JSP+Servlet+JDBC实现就完成了。可以根据需要进行修改和扩展。
阅读全文