按照JSPMODEL2的思想实现用户注册功能。 要求(1)在MySql数据库创建用户表user。 (2)在idea 中创建maven 的 web 项目。 (3)创建用户实体类User.java (4)编写JDBC访问数据库的通用工具类MyDb.java (5)创建注册页面register.jsp,使用EL读取提示信息。 (6)创建表单验证类RegisterFormBean.java (7)编写注册控制器RegisterServlet.java (8)编写注册页面registerSuccess.jsp,使用EL显示注册的用户信息。"
时间: 2023-06-10 14:06:55 浏览: 211
好的,我来给你详细解答一下。
首先,按照要求在 MySQL 数据库中创建一个名为 user 的表,该表至少应该包含以下字段:
- id:用户 ID,是一个自增长的整数;
- username:用户名,是一个字符串;
- password:密码,是一个字符串;
- email:电子邮件,是一个字符串;
- phone:电话号码,是一个字符串。
其次,在 IntelliJ IDEA 中创建一个 Maven Web 项目。在项目中,创建一个名为 com.example 的包(你可以根据自己的需要自定义包名),并在该包中创建一个名为 User 的 Java 类,用于表示用户实体。
```java
package com.example;
public class User {
private int id;
private String username;
private String password;
private String email;
private String phone;
public User() {}
public User(String username, String password, String email, String phone) {
this.username = username;
this.password = password;
this.email = email;
this.phone = phone;
}
// 省略 getter 和 setter 方法
}
```
然后,我们需要编写一个 JDBC 访问数据库的通用工具类,可以使用 JdbcUtils 工具类来简化我们的代码。
```java
package com.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcUtils {
private static final String URL = "jdbc:mysql://localhost:3306/mydb?useSSL=false";
private static final String USERNAME = "root";
private static final String PASSWORD = "password";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
}
public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
接下来,我们需要创建一个名为 register.jsp 的 JSP 页面,用于接收用户注册信息,并使用 EL(Expression Language)读取提示信息。下面是一个简单的示例:
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>用户注册</title>
</head>
<body>
<h1>用户注册</h1>
<form action="register" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value="${user.username}"></td>
<td><c:if test="${not empty errors.username}"><fmt:message key="${errors.username}"/></c:if></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" value="${user.password}"></td>
<td><c:if test="${not empty errors.password}"><fmt:message key="${errors.password}"/></c:if></td>
</tr>
<tr>
<td>确认密码:</td>
<td><input type="password" name="confirmPassword" value="${user.confirmPassword}"></td>
<td><c:if test="${not empty errors.confirmPassword}"><fmt:message key="${errors.confirmPassword}"/></c:if></td>
</tr>
<tr>
<td>电子邮件:</td>
<td><input type="text" name="email" value="${user.email}"></td>
<td><c:if test="${not empty errors.email}"><fmt:message key="${errors.email}"/></c:if></td>
</tr>
<tr>
<td>电话号码:</td>
<td><input type="text" name="phone" value="${user.phone}"></td>
<td><c:if test="${not empty errors.phone}"><fmt:message key="${errors.phone}"/></c:if></td>
</tr>
<tr>
<td colspan="3"><input type="submit" value="注册"></td>
</tr>
</table>
</form>
</body>
</html>
```
接着,我们需要创建一个名为 RegisterFormBean 的 Java 类,用于表单验证。该类需要包含以下属性:
- username:用户名,是一个字符串;
- password:密码,是一个字符串;
- confirmPassword:确认密码,是一个字符串;
- email:电子邮件,是一个字符串;
- phone:电话号码,是一个字符串。
```java
package com.example;
public class RegisterFormBean {
private String username;
private String password;
private String confirmPassword;
private String email;
private String phone;
public RegisterFormBean() {}
public RegisterFormBean(String username, String password, String confirmPassword, String email, String phone) {
this.username = username;
this.password = password;
this.confirmPassword = confirmPassword;
this.email = email;
this.phone = phone;
}
// 省略 getter 和 setter 方法
}
```
在 RegisterFormBean 类中,我们需要编写一个名为 validate 的方法,用于验证表单数据是否合法。如果表单数据不合法,则该方法应该返回一个包含错误提示信息的 Map 对象。
```java
package com.example;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
public class RegisterFormBean {
// 省略其他代码
public Map<String, String> validate() {
Map<String, String> errors = new HashMap<>();
if (username == null || username.trim().equals("")) {
errors.put("username", "用户名不能为空");
}
if (password == null || password.trim().equals("")) {
errors.put("password", "密码不能为空");
}
if (confirmPassword == null || confirmPassword.trim().equals("")) {
errors.put("confirmPassword", "确认密码不能为空");
}
if (!password.equals(confirmPassword)) {
errors.put("confirmPassword", "两次输入的密码不一致");
}
if (email == null || email.trim().equals("")) {
errors.put("email", "电子邮件不能为空");
} else if (!Pattern.matches("\\w+@\\w+\\.\\w+", email)) {
errors.put("email", "电子邮件格式不正确");
}
if (phone == null || phone.trim().equals("")) {
errors.put("phone", "电话号码不能为空");
} else if (!Pattern.matches("\\d{11}", phone)) {
errors.put("phone", "电话号码格式不正确");
}
return errors;
}
}
```
接下来,我们需要编写一个名为 RegisterServlet 的 Java 类,用于处理用户注册请求。在该类中,我们需要实现 doPost 方法,该方法应该完成以下任务:
- 从 request 对象中获取用户提交的注册信息;
- 对注册信息进行表单验证;
- 如果表单数据无误,则将注册信息插入到 MySQL 数据库中;
- 将注册成功的用户信息存储到 request 对象中,并将请求转发到 registerSuccess.jsp 页面。
```java
package com.example;
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 java.io.IOException;
import java.util.Map;
@WebServlet(name = "RegisterServlet", urlPatterns = {"/register"})
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 从 request 对象中获取用户提交的注册信息
String username = request.getParameter("username");
String password = request.getParameter("password");
String confirmPassword = request.getParameter("confirmPassword");
String email = request.getParameter("email");
String phone = request.getParameter("phone");
// 构造 RegisterFormBean 对象
RegisterFormBean formBean = new RegisterFormBean(username, password, confirmPassword, email, phone);
// 对注册信息进行表单验证
Map<String, String> errors = formBean.validate();
if (errors.isEmpty()) {
// 如果表单数据无误,则将注册信息插入到 MySQL 数据库中
User user = new User(username, password, email, phone);
try {
Connection conn = JdbcUtils.getConnection();
PreparedStatement ps = conn.prepareStatement("INSERT INTO user (username, password, email, phone) VALUES (?, ?, ?, ?)");
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
ps.setString(3, user.getEmail());
ps.setString(4, user.getPhone());
ps.executeUpdate();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
// 将注册成功的用户信息存储到 request 对象中,并将请求转发到 registerSuccess.jsp 页面
request.setAttribute("user", user);
request.getRequestDispatcher("/registerSuccess.jsp").forward(request, response);
} else {
// 如果表单数据有误,则将错误提示信息存储到 request 对象中,并将请求转发到 register.jsp 页面
request.setAttribute("errors", errors);
request.setAttribute("user", formBean);
request.getRequestDispatcher("/register.jsp").forward(request, response);
}
}
}
```
最后,我们需要创建一个名为 registerSuccess.jsp 的 JSP 页面,用于显示注册成功的用户信息。下面是一个简单的示例:
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户注册成功</title>
</head>
<body>
<h1>用户注册成功</h1>
<p>您已经成功注册了一个新用户,以下是您的注册信息:</p>
<table>
<tr>
<td>用户名:</td>
<td>${user.username}</td>
</tr>
<tr>
<td>密码:</td>
<td>${user.password}</td>
</tr>
<tr>
<td>电子邮件:</td>
<td>${user.email}</td>
</tr>
<tr>
<td>电话号码:</td>
<td>${user.phone}</td>
</tr>
</table>
</body>
</html>
```
好了,以上就是按照 JSP Model 2 的思想实现用户注册功能的全部步骤。
阅读全文