用servlet和html和mysql编写用户登录注册界面
时间: 2023-12-14 13:38:34 浏览: 34
好的,下面是一个简单的用户登录注册界面的示例,使用servlet、html和mysql编写:
1. 创建数据库
首先创建一个名为`user`的数据库,其中包含一个名为`user_info`的表,该表包含以下字段:
- `id`:用户ID,自增长整数类型
- `username`:用户名,字符串类型
- `password`:密码,字符串类型
2. 创建servlet
创建一个名为`LoginServlet`的servlet,用于处理用户登录请求。该servlet实现以下功能:
- 接收从前端提交的用户名和密码;
- 验证用户名和密码是否正确;
- 如果用户名和密码正确,则将用户信息保存到session中,并重定向到主页;
- 如果用户名和密码不正确,则返回错误信息。
下面是一个示例代码:
```java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
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.servlet.http.HttpSession;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 数据库连接信息
private static final String DB_URL = "jdbc:mysql://localhost:3306/user";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "123456";
// 登录页面
private static final String LOGIN_PAGE = "login.html";
// 主页面
private static final String MAIN_PAGE = "index.html";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 查询数据库
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
String sql = "SELECT id FROM user_info WHERE username=? AND password=?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
// 登录成功
int userId = rs.getInt("id");
HttpSession session = request.getSession(true);
session.setAttribute("userId", userId);
response.sendRedirect(MAIN_PAGE);
} else {
// 登录失败
response.sendRedirect(LOGIN_PAGE + "?error=1");
}
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
response.sendRedirect(LOGIN_PAGE + "?error=2");
}
}
}
```
创建一个名为`RegisterServlet`的servlet,用于处理用户注册请求。该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.SQLException;
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("/register")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 数据库连接信息
private static final String DB_URL = "jdbc:mysql://localhost:3306/user";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "123456";
// 注册页面
private static final String REGISTER_PAGE = "register.html";
// 登录页面
private static final String LOGIN_PAGE = "login.html";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 检查用户名是否已经存在
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
String sql = "SELECT id FROM user_info WHERE username=?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
// 用户名已经存在
response.sendRedirect(REGISTER_PAGE + "?error=1");
} else {
// 用户名不存在,保存用户信息到数据库中
sql = "INSERT INTO user_info (username, password) VALUES (?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, password);
stmt.executeUpdate();
response.sendRedirect(LOGIN_PAGE);
}
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
response.sendRedirect(REGISTER_PAGE + "?error=2");
}
}
}
```
3. 创建html页面
创建一个名为`login.html`的登录页面,包含以下内容:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<form action="login" method="post">
<p>
<label for="username">Username:</label>
<input type="text" name="username" id="username" required>
</p>
<p>
<label for="password">Password:</label>
<input type="password" name="password" id="password" required>
</p>
<p>
<button type="submit">Login</button>
<a href="register.html">Register</a>
</p>
</form>
<% if ("1".equals(request.getParameter("error"))) { %>
<p style="color: red;">Invalid username or password</p>
<% } else if ("2".equals(request.getParameter("error"))) { %>
<p style="color: red;">System error, please try again later</p>
<% } %>
</body>
</html>
```
创建一个名为`register.html`的注册页面,包含以下内容:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register Page</title>
</head>
<body>
<h1>Register Page</h1>
<form action="register" method="post">
<p>
<label for="username">Username:</label>
<input type="text" name="username" id="username" required>
</p>
<p>
<label for="password">Password:</label>
<input type="password" name="password" id="password" required>
</p>
<p>
<button type="submit">Register</button>
<a href="login.html">Back to Login Page</a>
</p>
</form>
<% if ("1".equals(request.getParameter("error"))) { %>
<p style="color: red;">Username already exists</p>
<% } else if ("2".equals(request.getParameter("error"))) { %>
<p style="color: red;">System error, please try again later</p>
<% } %>
</body>
</html>
```
4. 部署项目
将以上代码打包成war包,并部署到Tomcat服务器上。在浏览器中访问登录页面,即可进行用户登录和注册操作。