来一个jsp实现最简单的登录注册增删改查的数据库
时间: 2023-08-01 07:06:00 浏览: 56
好的,下面是一个使用JSP实现最简单的登录注册增删改查的数据库的示例代码:
1. 创建数据库表
首先创建一个名为users的表,包含以下字段:
- id: 主键,自增长
- username: 用户名,唯一索引
- password: 密码
可以使用以下SQL语句创建表:
```sql
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
```
2. 创建注册页面
在Web应用程序的主目录中创建一个名为register.jsp的JSP文件。该文件包含一个表单,其中用户输入用户名和密码。当用户提交表单时,将向数据库添加新用户。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<h1>Register</h1>
<form method="post" action="register.jsp">
<label>Username:</label>
<input type="text" name="username" required><br>
<label>Password:</label>
<input type="password" name="password" required><br>
<input type="submit" value="Register">
</form>
</body>
</html>
```
在register.jsp文件中添加以下Java代码,将新用户插入到数据库中:
```java
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username != null && password != null) {
// 将密码进行哈希处理
String hashedPassword = hashPassword(password);
// 将用户插入到数据库中
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "username", "password")) {
String sql = "INSERT INTO users (username, password) VALUES (?, ?)";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, username);
stmt.setString(2, hashedPassword);
stmt.executeUpdate();
}
} catch (SQLException e) {
out.println("Error: " + e.getMessage());
}
}
%>
```
在上面的代码中,我们使用了一个名为hashPassword的函数,它将用户密码进行哈希处理。在实际应用中,应该使用更安全的哈希算法,例如SHA-256。
3. 创建登录页面
在Web应用程序的主目录中创建一个名为login.jsp的JSP文件。该文件包含一个表单,其中用户输入用户名和密码。当用户提交表单时,将检查用户名和密码是否匹配,并将用户重定向到主页面。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form method="post" action="login.jsp">
<label>Username:</label>
<input type="text" name="username" required><br>
<label>Password:</label>
<input type="password" name="password" required><br>
<input type="submit" value="Login">
</form>
</body>
</html>
```
在login.jsp文件中添加以下Java代码,检查用户名和密码是否匹配,并将用户重定向到主页面:
```java
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username != null && password != null) {
// 将密码进行哈希处理
String hashedPassword = hashPassword(password);
// 检查用户名和密码是否匹配
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "username", "password")) {
String sql = "SELECT id FROM users WHERE username = ? AND password = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, username);
stmt.setString(2, hashedPassword);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
// 用户名和密码匹配,将用户ID存储在会话中
int userId = rs.getInt("id");
HttpSession session = request.getSession();
session.setAttribute("userId", userId);
// 重定向到主页面
response.sendRedirect("index.jsp");
return;
} else {
out.println("Invalid username or password.");
}
}
}
} catch (SQLException e) {
out.println("Error: " + e.getMessage());
}
}
%>
```
在上面的代码中,我们使用了会话来存储已登录用户的ID。在后面的页面中,我们将使用该ID来检索用户的信息。
4. 创建主页面
在Web应用程序的主目录中创建一个名为index.jsp的JSP文件。该文件显示当前已登录用户的信息,并提供一个链接,可以退出登录。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<h1>Welcome to the Home Page</h1>
<%
Integer userId = (Integer) session.getAttribute("userId");
if (userId == null) {
// 用户未登录,重定向到登录页面
response.sendRedirect("login.jsp");
return;
}
// 从数据库中检索用户信息
String username = null;
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "username", "password")) {
String sql = "SELECT username FROM users WHERE id = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, userId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
username = rs.getString("username");
}
}
}
} catch (SQLException e) {
out.println("Error: " + e.getMessage());
}
%>
<p>Hello, <%= username %>!</p>
<a href="logout.jsp">Logout</a>
</body>
</html>
```
在上面的代码中,我们首先检查用户是否已登录。如果用户未登录,我们将重定向到登录页面。否则,我们将从数据库中检索用户名,并在页面上显示该用户名。我们还提供一个链接,可以退出登录。
5. 创建注销页面
在Web应用程序的主目录中创建一个名为logout.jsp的JSP文件。该文件将从会话中删除已登录用户的ID,并将用户重定向到登录页面。
```java
<%
HttpSession session = request.getSession();
session.removeAttribute("userId");
response.sendRedirect("login.jsp");
%>
```
在上面的代码中,我们从会话中删除已登录用户的ID,并将用户重定向到登录页面。
6. 创建删除用户页面
在Web应用程序的主目录中创建一个名为delete.jsp的JSP文件。该文件包含一个表单,其中用户输入要删除的用户名。当用户提交表单时,将从数据库中删除该用户。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Delete User</title>
</head>
<body>
<h1>Delete User</h1>
<form method="post" action="delete.jsp">
<label>Username:</label>
<input type="text" name="username" required><br>
<input type="submit" value="Delete">
</form>
</body>
</html>
```
在delete.jsp文件中添加以下Java代码,从数据库中删除指定的用户:
```java
<%
String username = request.getParameter("username");
if (username != null) {
// 从数据库中删除指定的用户
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "username", "password")) {
String sql = "DELETE FROM users WHERE username = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, username);
stmt.executeUpdate();
}
} catch (SQLException e) {
out.println("Error: " + e.getMessage());
}
}
%>
```
7. 创建修改密码页面
在Web应用程序的主目录中创建一个名为changepassword.jsp的JSP文件。该文件包含一个表单,其中用户输入当前密码和新密码。当用户提交表单时,将检查当前密码是否正确,并将新密码写入数据库中。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Change Password</title>
</head>
<body>
<h1>Change Password</h1>
<form method="post" action="changepassword.jsp">
<label>Current Password:</label>
<input type="password" name="currentPassword" required><br>
<label>New Password:</label>
<input type="password" name="newPassword" required><br>
<input type="submit" value="Change">
</form>
</body>
</html>
```
在changepassword.jsp文件中添加以下Java代码,检查当前密码是否正确,并将新密码写入数据库中:
```java
<%
String currentPassword = request.getParameter("currentPassword");
String newPassword = request.getParameter("newPassword");
Integer userId = (Integer) session.getAttribute("userId");
if (userId == null) {
// 用户未登录,重定向到登录页面
response.sendRedirect("login.jsp");
return;
}
// 检查当前密码是否正确
boolean passwordCorrect = false;
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "username", "password")) {
String sql = "SELECT password FROM users WHERE id = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, userId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String hashedPassword = rs.getString("password");
passwordCorrect = checkPassword(currentPassword, hashedPassword);
}
}
}
} catch (SQLException e) {
out.println("Error: " + e.getMessage());
}
if (passwordCorrect) {
// 将新密码写入数据库中
String hashedPassword = hashPassword(newPassword);
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "username", "password")) {
String sql = "UPDATE users SET password = ? WHERE id = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, hashedPassword);
stmt.setInt(2, userId);
stmt.executeUpdate();
}
} catch (SQLException e) {
out.println("Error: " + e.getMessage());
}
} else {
out.println("Incorrect current password.");
}
%>
```
在上面的代码中,我们首先检查用户是否已登录。如果用户未登录,我们将重定向到登录页面。否则,我们将检查当前密码是否正确。如果当前密码正确,我们将计算新密码的哈希值,并将其写入数据库中。否则,我们将在页面上显示错误消息。
8. 总结
以上是一个使用JSP实现最简单的登录注册增删改查的数据库的示例代码。该示例使用了MySQL数据库和JDBC驱动程序。在实际应用中,应该使用更安全的密码哈希算法,并采取其他安全措施,例如防止SQL注入攻击。