头歌本关任务:完成AddUserServlet类的编写,实现添加用户的功能。要求在页面完成新用户表单填写后,可将相关新用户信息持久化到数据库中,并要求在完成用户添加后重定向至用户详细信息显示页面。
时间: 2024-10-18 18:17:25 浏览: 53
头歌本关任务涉及到一个典型的Web应用程序开发,使用的是Java Servlet技术结合JDBC(Java Database Connectivity)来操作数据库。首先,你需要创建一个`AddUserServlet`类,它会接收来自前端(如HTML表单)的POST请求,包含新用户的各项信息。
以下是`AddUserServlet`的基本结构:
```java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
@WebServlet("/addUser")
public class AddUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 获取请求参数
String username = request.getParameter("username");
String email = request.getParameter("email");
String password = request.getParameter("password");
// 2. 配置连接数据库的资源
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 假设使用MySQL数据库,连接字符串需要替换为你实际的数据库配置
String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "root";
String pass = "password";
conn = DriverManager.getConnection(url, user, pass);
// 3. SQL插入查询(预编译防止SQL注入)
String sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, email);
pstmt.setString(3, encryptPassword(password)); // 调用密码加密函数
// 4. 执行插入操作
int rowsInserted = pstmt.executeUpdate();
if (rowsInserted > 0) {
// 5. 成功添加用户后,发送响应并重定向
response.sendRedirect("showUserDetails.jsp?userId=" + username);
response.getWriter().println("用户添加成功,已跳转到详情页.");
} else {
response.getWriter().println("用户添加失败.");
}
} catch (SQLException e) {
e.printStackTrace();
// 数据库操作错误处理...
} finally {
// 6. 关闭连接资源
closeQuietly(pstmt);
closeQuietly(conn);
}
}
private void closeQuietly(Closeable c) {
if (c != null) {
try {
c.close();
} catch (IOException ignore) {}
}
}
}
```
在这个例子中,我们假设有一个名为`users`的表,有`username`, `email`, 和 `password`字段。`encryptPassword()`是一个自定义函数用于安全地存储密码,这里仅作示例,实际应用中应使用安全的加密算法。
阅读全文