马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、项目准备
- JDK 1.8+
- MySQL 8.0+
- MyEclipse 2022或IntelliJ IDEA
- Tomcat 9.x
- [/code] sql
- [code]CREATE TABLE users (
- id INT AUTO_INCREMENT PRIMARY KEY,
- username VARCHAR(50) NOT NULL UNIQUE,
- password VARCHAR(100) NOT NULL,
- email VARCHAR(100)
- );
复制代码 二、项目结构说明
src/
├── com.example.model → 实体类
│ └── User.java
├── com.example.util → 工具类
│ └── DBUtil.java
├── com.example.servlet → Servlet类
│ ├── LoginServlet.java
│ └── RegisterServlet.java
WebContent/
├── WEB-INF/
│ ├── web.xml
│ └── lib/ → 放置JDBC驱动
├── index.jsp → 首页
├── login.jsp → 登录页面
└── register.jsp → 注册页面
三、核心代码实现
- [/code] java
- [code]package com.example.model;
- public class User {
- private int id;
- private String username;
- private String password;
- private String email;
- // 省略getter和setter方法
- }
复制代码- [/code] java
- [code]package com.example.util;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- public class DBUtil {
- private static final String URL = "jdbc:mysql://localhost:3306/user_db?useSSL=false&serverTimezone=UTC";
- private static final String USER = "root";
- private static final String PASSWORD = "password"; // 修改为实际密码
- static {
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- public static Connection getConnection() throws SQLException {
- return DriverManager.getConnection(URL, USER, PASSWORD);
- }
- }
复制代码
- 登录Servlet(LoginServlet.java)
- [/code] java
- [code]package com.example.servlet;
- import com.example.model.User;
- import com.example.util.DBUtil;
- 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.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- @WebServlet("/login")
- public class LoginServlet extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- String username = req.getParameter("username");
- String password = req.getParameter("password");
- try (Connection conn = DBUtil.getConnection()) {
- String sql = "SELECT * FROM users WHERE username = ?";
- PreparedStatement pstmt = conn.prepareStatement(sql);
- pstmt.setString(1, username);
-
- ResultSet rs = pstmt.executeQuery();
- if (rs.next() && rs.getString("password").equals(password)) {
- User user = new User();
- user.setId(rs.getInt("id"));
- user.setUsername(rs.getString("username"));
- user.setEmail(rs.getString("email"));
-
- req.getSession().setAttribute("user", user);
- resp.sendRedirect(req.getContextPath() + "/welcome.jsp");
- } else {
- req.setAttribute("error", "用户名或密码错误");
- req.getRequestDispatcher("/login.jsp").forward(req, resp);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- req.setAttribute("error", "数据库连接错误");
- req.getRequestDispatcher("/login.jsp").forward(req, resp);
- }
- }
- }
复制代码
- 注册Servlet(RegisterServlet.java)
- [/code] java
- [code]package com.example.servlet;
- import com.example.model.User;
- import com.example.util.DBUtil;
- 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.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- @WebServlet("/register")
- public class RegisterServlet extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- String username = req.getParameter("username");
- String password = req.getParameter("password");
- String email = req.getParameter("email");
- User user = new User();
- user.setUsername(username);
- user.setPassword(password);
- user.setEmail(email);
- try (Connection conn = DBUtil.getConnection()) {
- String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
- PreparedStatement pstmt = conn.prepareStatement(sql);
- pstmt.setString(1, username);
- pstmt.setString(2, password);
- pstmt.setString(3, email);
-
- int affectedRows = pstmt.executeUpdate();
- if (affectedRows > 0) {
- resp.sendRedirect(req.getContextPath() + "/login.jsp");
- } else {
- req.setAttribute("error", "注册失败,请重试");
- req.getRequestDispatcher("/register.jsp").forward(req, resp);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- req.setAttribute("error", "数据库操作错误");
- req.getRequestDispatcher("/register.jsp").forward(req, resp);
- }
- }
- }
复制代码 四、JSP页面示例(login.jsp)
- [/code] jsp
- [code]<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>登录页面</title>
- </head>
- <body>
- <h2>用户登录</h2>
- <form action="login" method="post">
- 用户名:<input type="text" name="username"><br><br>
- 密码:<input type="password" name="password"><br><br>
- <input type="submit" value="登录">
- </form>
- <% if (request.getAttribute("error") != null) { %>
- <p style="color:red;"><%= request.getAttribute("error") %></p>
- <% } %>
- <a href="register.jsp">还没有账号?立即注册</a>
- </body>
- </html>
复制代码 五、设置说明
- [/code] xml
- [code]<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
- version="4.0">
-
- <servlet>
- <servlet-name>LoginServlet</servlet-name>
- <servlet-class>com.example.servlet.LoginServlet</servlet-class>
- </servlet>
-
- <servlet>
- <servlet-name>RegisterServlet</servlet-name>
- <servlet-class>com.example.servlet.RegisterServlet</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>LoginServlet</servlet-name>
- <url-pattern>/login</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>RegisterServlet</servlet-name>
- <url-pattern>/register</url-pattern>
- </servlet-mapping>
- </web-app>
复制代码 六、注意事项
- 数据库驱动需要添加到项目的lib目录下(mysql-connector-java-8.0.26.jar)
- 根据实际环境修改DBUtil类中的数据库连接参数
- 初始状态下数据库是空的,首次运行前需要插入测试数据:
- [/code] sql
- [code]INSERT INTO users (username, password, email) VALUES
- ('admin', 'password123', 'admin@example.com'),
- ('user', 'user123', 'user@example.com');
复制代码 七、常见标题处理惩罚
- 访问404错误:检查servlet映射的URL路径是否正确
- 数据库连接失败:确认MySQL服务已启动,JDBC驱动版本是否匹配
- 暗码不匹配:确保在注册时存储的是明文暗码(生产环境请利用加密算法)
八、安全建议(生产环境实用)
- 利用PreparedStatement防止SQL注入
- 暗码存储应采用MD5/SHA加密算法
- 添加验证码机制
- 利用HTTPS协议传输敏感数据
本文完整代码可在GitHub开源仓库获取(需注明出处),建议新手通过此项目实践明确JavaWeb开发的基本流程和核心技能点。学习过程中遇到标题可通过官方文档和社区论坛寻求资助。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |