• javaweb登录注册页面页面的完整代码


    以下是一个简单的JavaWeb登录注册页面的完整代码示例:

    index.jsp:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>Login and Registration</title>
    5. </head>
    6. <body>
    7. <h2>Login</h2>
    8. <form action="login" method="post">
    9. <label for="username">Username:</label>
    10. <input type="text" id="username" name="username" required><br><br>
    11. <label for="password">Password:</label>
    12. <input type="password" id="password" name="password" required><br><br>
    13. <input type="submit" value="Login">
    14. </form>
    15. <h2>Register</h2>
    16. <form action="register" method="post">
    17. <label for="username">Username:</label>
    18. <input type="text" id="username" name="username" required><br><br>
    19. <label for="password">Password:</label>
    20. <input type="password" id="password" name="password" required><br><br>
    21. <input type="submit" value="Register">
    22. </form>
    23. </body>
    24. </html>

    LoginServlet.java:

    1. import java.io.IOException;
    2. import java.io.PrintWriter;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. public class LoginServlet extends HttpServlet {
    8. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    9. String username = request.getParameter("username");
    10. String password = request.getParameter("password");
    11. if (username.equals("admin") && password.equals("admin")) {
    12. response.sendRedirect("success.jsp");
    13. } else {
    14. response.sendRedirect("failure.jsp");
    15. }
    16. }
    17. }

    RegisterServlet.java:

    1. import java.io.IOException;
    2. import java.io.PrintWriter;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. public class RegisterServlet extends HttpServlet {
    8. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    9. String username = request.getParameter("username");
    10. String password = request.getParameter("password");
    11. if (username != null && !username.trim().isEmpty() && password != null && !password.trim().isEmpty()) {
    12. response.sendRedirect("success_register.jsp");
    13. } else {
    14. response.sendRedirect("failure_register.jsp");
    15. }
    16. }
    17. }

    failure.jsp:

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>Failure</title>
    5. </head>
    6. <body>
    7. <h1>Login/Registration Failed!</h1>
    8. </body>
    9. </html>

    这是一个简单的示例,其中包含了一个index.jsp页面,该页面显示了登录和注册表单,并将数据提交给LoginServlet和RegisterServlet进行处理。如果登录或注册成功,将重定向到success.jsp页面;否则,将重定向到failure.jsp页面。注意,在实际开发中,你需要更复杂的逻辑和安全性来验证用户名和密码,并处理数据持久化。此示例仅用于演示目的。

    当然,让我们继续完善这个示例。

    添加用户验证

    我们可以在RegisterServlet中添加更多的验证,例如检查用户名是否已经存在,密码是否满足最小长度和复杂度等。

    1. import java.io.IOException;
    2. import java.io.PrintWriter;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. public class RegisterServlet extends HttpServlet {
    8. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    9. String username = request.getParameter("username");
    10. String password = request.getParameter("password");
    11. if (username == null || password == null) {
    12. response.sendRedirect("failure.jsp?message=Please%20fill%20out%20all%20the%20fields");
    13. return;
    14. }
    15. // Check if the username already exists.
    16. if (usernameExists(username)) {
    17. response.sendRedirect("failure.jsp?message=Username%20already%20exists");
    18. return;
    19. }
    20. // Check if the password meets the criteria (min length, complexity).
    21. if (!passwordMeetsCriteria(password)) {
    22. response.sendRedirect("failure.jsp?message=Password%20does%20not%20meet%20the%20requirements");
    23. return;
    24. }
    25. // Save the user information to the database.
    26. // ...
    27. response.sendRedirect("success.jsp");
    28. }
    29. private boolean usernameExists(String username) {
    30. // Implement your logic here to check if the username already exists in the database.
    31. // You can use a Data Access Object (DAO) or a service layer to perform this operation.
    32. return false; // Placeholder logic.
    33. }
    34. private boolean passwordMeetsCriteria(String password) {
    35. // Implement your logic here to check if the password meets the required criteria.
    36. // You can define your own rules for password complexity and minimum length.
    37. return false; // Placeholder logic.
    38. }
    39. }

    添加错误消息传递

    failure.jsp中,我们可以通过查询字符串参数来传递错误消息,然后在页面上显示它。

    failure.jsp

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>Failure</title>
    5. </head>
    6. <body>
    7. <h1>Login/Registration Failed!</h1>
    8. <p>${message}</p> <!-- Here we read the message from the query string and display it. -->
    9. </body>
    10. </html>

    以上示例仅为基础示例,真实的Web开发通常涉及更多的安全性和错误处理机制,还需要处理更多的边界情况和细节。希望这个基础示例对你有所帮助!

    添加密码加密

    在保存用户密码时,我们应该使用加密算法来保护用户密码的安全性。我们可以使用Java的内置加密库或第三方库如bcrypt来加密密码。

    1. import java.nio.charset.StandardCharsets;
    2. import java.security.MessageDigest;
    3. import java.security.NoSuchAlgorithmException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. public class RegisterServlet extends HttpServlet {
    8. // ...
    9. private boolean passwordMeetsCriteria(String password) {
    10. // Check if the password length is at least 8 characters.
    11. if (password.length() < 8) {
    12. return false;
    13. }
    14. // Check if the password contains at least one uppercase letter, one lowercase letter, and one digit.
    15. boolean hasUppercase = false, hasLowercase = false, hasDigit = false;
    16. for (char c : password.toCharArray()) {
    17. if (Character.isUpperCase(c)) {
    18. hasUppercase = true;
    19. } else if (Character.isLowerCase(c)) {
    20. hasLowercase = true;
    21. } else if (Character.isDigit(c)) {
    22. hasDigit = true;
    23. }
    24. }
    25. return hasUppercase && hasLowercase && hasDigit;
    26. }
    27. private String encryptPassword(String password) {
    28. try {
    29. MessageDigest md = MessageDigest.getInstance("SHA-256");
    30. byte[] hash = md.digest(password.getBytes(StandardCharsets.UTF_8));
    31. StringBuilder sb = new StringBuilder();
    32. for (byte b : hash) {
    33. sb.append(String.format("%02x", b));
    34. }
    35. return sb.toString();
    36. } catch (NoSuchAlgorithmException e) {
    37. throw new RuntimeException(e);
    38. }
    39. }
    40. private boolean usernameExists(String username) {
    41. // Implement your logic here to check if the username already exists in the database.
    42. // You can use a Data Access Object (DAO) or a service layer to perform this operation.
    43. return false;
    44. }
    45. }

    添加密码加密(使用bcrypt)

    使用bcrypt库可以更安全地加密密码。首先,你需要将bcrypt库添加到项目的依赖中。然后,可以使用BCryptPasswordEncoder类来对密码进行加密和解密。

    1. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    2. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoderBuilder;
    3. public class RegisterServlet extends HttpServlet {
    4. // ...
    5. private boolean passwordMeetsCriteria(String password) {
    6. // Check if the password length is at least 8 characters.
    7. if (password.length() < 8) {
    8. return false;
    9. }
    10. // Check if the password contains at least one uppercase letter, one lowercase letter, and one digit.
    11. boolean hasUppercase = false, hasLowercase = false, hasDigit = false;
    12. for (char c : password.toCharArray()) {
    13. if (Character.isUpperCase(c)) {
    14. hasUppercase = true;
    15. } else if (Character.isLowerCase(c)) {
    16. hasLowercase = true;
    17. } else if (Character.isDigit(c)) {
    18. hasDigit = true;
    19. }
    20. }
    21. return hasUppercase && hasLowercase && hasDigit;
    22. }
    23. private String encryptPassword(String password) {
    24. BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoderBuilder().build();
    25. return passwordEncoder.encode(password);
    26. }
    27. // ...
    28. }

    现在,让我们完善success.jspfailure.jsp

    success.jsp

    当注册成功时,显示成功消息和欢迎信息。

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>Success</title>
    5. </head>
    6. <body>
    7. <h1>Registration Successful!</h1>
    8. <p>Welcome, ${username}! You can now log in.</p>
    9. </body>
    10. </html>

    failure.jsp

    当注册失败时,显示失败消息和错误信息。

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>Failure</title>
    5. </head>
    6. <body>
    7. <h1>Registration Failed!</h1>
    8. <p>Error message: ${message}</p>
    9. </body>
    10. </html>
  • 相关阅读:
    Kafka 万亿级消息实践之资源组流量掉零故障排查分析
    ZooKeeper技术内幕
    Vite+Vue3+Ant Design3.2报错: Cannot read properties of null (reading ‘isCE‘)
    不到3000块钱,如何支撑起每月500万次访问量及80TB流量的网站?
    粒子群算法
    使用 Grafana 使用JSON API 请求本地接口 报错 bad gateway(502)解决
    mongodump工具安装及使用详解
    Java系列之:var关键字
    使用springcloud-seata解决分布式事务问题-2PC模式
    【矩阵分析】矩阵幂级数 发散 条件 || 幂级数 与 解析函数 的关系 || 幂级数 收敛半径r 的求法
  • 原文地址:https://blog.csdn.net/luxiaol/article/details/134547685