用servlet+jsp+jdbc+mysql实现浏览记录功能,给出具体代码
时间: 2023-12-30 15:02:06 浏览: 145
以下是一个简单的实现浏览记录功能的示例代码:
1. 创建数据库表
首先需要在 MySQL 中创建一个表来存储浏览记录,可以使用以下 SQL 语句:
```sql
CREATE TABLE browsing_history (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
url VARCHAR(255) NOT NULL,
title VARCHAR(255) NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
2. 编写 Java Servlet
创建一个 Java Servlet 来处理用户访问页面时添加浏览记录的操作。以下是示例代码:
```java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
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("/addHistory")
public class AddHistoryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String DB_URL = "jdbc:mysql://localhost:3306/test";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "password";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String url = request.getParameter("url");
String title = request.getParameter("title");
int userId = 1; // TODO: 获取当前用户 ID
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
String sql = "INSERT INTO browsing_history (user_id, url, title) VALUES (?, ?, ?)";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, userId);
stmt.setString(2, url);
stmt.setString(3, title);
stmt.executeUpdate();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
response.sendRedirect(url);
}
}
```
这个 Servlet 接收两个参数:`url` 和 `title`,分别表示用户访问的页面的 URL 和标题。在 Servlet 中,首先获取当前用户的 ID(在这个示例中,我们假设当前用户的 ID 为 1),然后将浏览记录插入到数据库中。最后,重定向到用户访问的页面。
3. 在 JSP 页面中添加链接
在 JSP 页面中,为了添加浏览记录,需要将页面中的链接都修改为使用一个特定的 URL,这个 URL 包含用户访问的原始 URL 和标题信息。以下是示例代码:
```jsp
<%@ 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>
<ul>
<li><a href="<%=request.getContextPath()%>/addHistory?url=http://www.example.com/page1&title=页面1">页面1</a></li>
<li><a href="<%=request.getContextPath()%>/addHistory?url=http://www.example.com/page2&title=页面2">页面2</a></li>
<li><a href="<%=request.getContextPath()%>/addHistory?url=http://www.example.com/page3&title=页面3">页面3</a></li>
</ul>
</body>
</html>
```
在这个示例中,我们为每个页面添加一个链接,链接的 URL 包含了原始页面的 URL 和标题信息。当用户点击这些链接时,将会调用之前创建的 Servlet,将浏览记录插入到数据库中,并重定向到原始页面。
4. 显示浏览记录
最后,为了显示用户的浏览记录,可以创建一个 JSP 页面来查询数据库,并将结果显示出来。以下是示例代码:
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>浏览记录示例</title>
</head>
<body>
<h1>浏览记录</h1>
<table>
<thead>
<tr>
<th>时间</th>
<th>标题</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<%
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
String sql = "SELECT * FROM browsing_history WHERE user_id = ? ORDER BY timestamp DESC";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, 1); // TODO: 获取当前用户 ID
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
String title = rs.getString("title");
String url = rs.getString("url");
Date timestamp = rs.getTimestamp("timestamp");
out.println("<tr>");
out.println("<td>" + timestamp + "</td>");
out.println("<td>" + title + "</td>");
out.println("<td><a href=\"" + url + "\">" + url + "</a></td>");
out.println("</tr>");
}
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
%>
</tbody>
</table>
</body>
</html>
```
这个 JSP 页面会查询数据库,获取当前用户的浏览记录,并将记录显示在一个表格中。需要注意的是,这个示例中用户 ID 都是写死的,需要根据具体的业务逻辑将其替换为实际的用户 ID。
阅读全文