• Javaweb开发 利用servlet+jsp+jdbc+tomcat数据库实现登录功能


    前言:很久没更新了,今天给大家分享一个Java web的小案例,是一个登录页面,利用Login控制类和JDBC连接数据库,并判断用户名密码是否正确,项目最终部署在Tomcat上。

    先看效果 

     

    正文 


    一、前期工作

    1.首先我们新建项目 (tomact提前配置好,不会的可以去我主页参考tomcat配置一文)

     

    2. 选中Web Profile依赖项

    3.mysql-connector-java-8.0.16.jar下载好保存到WEB-INF下 

    二、实现功能

    1.创建 LoginServlet类(内含jdbc建立数据库连接)

    1. package com.example.course_selection_system;
    2. import java.io.*;
    3. import javax.servlet.*;
    4. import javax.servlet.http.*;
    5. import java.sql.Connection;
    6. import java.sql.DriverManager;
    7. import java.sql.PreparedStatement;
    8. import java.sql.ResultSet;
    9. import java.sql.SQLException;
    10. public class LoginServlet extends HttpServlet {
    11. @Override
    12. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    13. throws ServletException, IOException {
    14. String username = request.getParameter("user");
    15. String password = request.getParameter("pwd");
    16. // 数据库连接参数
    17. String url = "jdbc:mysql://localhost:3306/student";
    18. String dbUsername = "root";
    19. String dbPassword = "root";
    20. try {
    21. // 加载驱动程序
    22. Class.forName("com.mysql.cj.jdbc.Driver");
    23. // 建立数据库连接
    24. Connection connection = DriverManager.getConnection(url, dbUsername, dbPassword);
    25. // 查询数据库
    26. String sql = "SELECT * FROM admins WHERE admin_name=? AND admin_password=?";
    27. try (PreparedStatement statement = connection.prepareStatement(sql)) {
    28. statement.setString(1, username);
    29. statement.setString(2, password);
    30. ResultSet resultSet = statement.executeQuery();
    31. if (resultSet.next()) {
    32. // 用户验证成功
    33. // 在这里可以进行登录成功后的操作
    34. response.sendRedirect("templates/student.jsp");
    35. } else {
    36. // 用户验证失败
    37. // 在这里可以进行登录失败后的操作
    38. request.setAttribute("error_message", "用户名或密码错误,请重试");
    39. RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
    40. dispatcher.forward(request, response);
    41. }
    42. }
    43. } catch (ClassNotFoundException e) {
    44. // 处理ClassNotFoundException异常
    45. e.printStackTrace(); // 记录日志
    46. // 向用户提供友好的错误提示
    47. request.setAttribute("error_message", "发生了意外错误,请联系管理员");
    48. RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
    49. dispatcher.forward(request, response);
    50. } catch (SQLException e) {
    51. // 处理SQLException异常
    52. e.printStackTrace(); // 记录日志
    53. // 向用户提供友好的错误提示
    54. request.setAttribute("error_message", "数据库错误,请稍后重试");
    55. RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
    56. dispatcher.forward(request, response);
    57. }
    58. }
    59. }

    2.在web.xml中配置Servlet映射

    是你为Servlet指定的名称, 是Servlet的完整类名, 是你希望为Servlet匹配的URL路径。

     3.编写login.jsp(action="login"

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    3. html>
    4. <html>
    5. <head>
    6. <meta charset="utf-8" />
    7. <title>学生成绩管理系统登陆title>
    8. <link rel="icon" href="http://v3.bootcss.com/favicon.ico">
    9. <style>
    10. li {
    11. list-style: none;
    12. }
    13. body {
    14. font-family: 'Arial', sans-serif;
    15. background-color: #3498db;
    16. color: white;
    17. margin: 0;
    18. padding: 0;
    19. display: flex;
    20. justify-content: center;
    21. align-items: center;
    22. height: 100vh;
    23. }
    24. #maxbox {
    25. background-color: #2c3e50;
    26. border-radius: 8px;
    27. box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    28. padding: 20px;
    29. text-align: center;
    30. }
    31. h1 {
    32. color: #ecf0f1;
    33. }
    34. h2 {
    35. color: #ecf0f1;
    36. }
    37. .inputbox {
    38. margin-top: 20px;
    39. }
    40. .inputText {
    41. margin-bottom: 15px;
    42. }
    43. input[type="text"],
    44. input[type="password"] {
    45. width: 100%;
    46. padding: 10px;
    47. margin-top: 5px;
    48. margin-bottom: 10px;
    49. box-sizing: border-box;
    50. border: 1px solid #3498db;
    51. border-radius: 4px;
    52. background-color: #ecf0f1;
    53. color: #2c3e50;
    54. }
    55. .inputButton {
    56. width: 100%;
    57. padding: 10px;
    58. border: none;
    59. border-radius: 4px;
    60. background-color: #3498db;
    61. color: white;
    62. cursor: pointer;
    63. }
    64. .inputButton:hover {
    65. background-color: #2980b9;
    66. }
    67. .remember {
    68. margin-right: 5px;
    69. }
    70. style>
    71. head>
    72. <div id="maxbox">
    73. <h1>学生成绩管理系统h1>
    74. <h2>请登录h2>
    75. <%-- Display error message if exists --%>
    76. <c:if test="${not empty error_message}">
    77. <p class="error-message">${error_message}p>
    78. c:if>
    79. <div class="inputbox">
    80. <form name="frm" action="login" method="post">
    81. <div class="inputText">
    82. <span class="iconfont icon-mine">span>
    83. <input class="username" type="text" placeholder="用户名" name="user" style="color:black" />
    84. div>
    85. <div class="inputText">
    86. <span class="iconfont icon-lock">span>
    87. <input type="password" placeholder="密码" name="pwd" style="color:black" />
    88. <br>
    89. <input class="remember" name="remember" type="checkbox" value="" checked="checked">
    90. <span style="color:white">记住我span>
    91. div>
    92. <input class="inputButton" type="submit" value="Sign in" />
    93. form>
    94. <div style="color: white">${msg}div>
    95. div>
    96. div>
    97. html>

     在引入<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>错误时说明没有依赖,去pom.xml里添加如下代码(导入该库是为了实现错误信息提示的功能)

    1. <dependency>
    2. <groupId>javax.servletgroupId>
    3. <artifactId>jstlartifactId>
    4. <version>1.2version>
    5. dependency>

    4.存储用户名和密码的表单

    三、运行tomcat(注意路径和端口正确)

     

    当用户名或密码输入错误时,系统会给出提示。

    输入正确后将会跳转到student.jsp

  • 相关阅读:
    基础 | 并发编程 - [导论 & volatile]
    Ubuntu22.04安装nvidia-docker
    EnvoyFilter实践: 通过解析子域名注入环境标识
    明明加了唯一索引,为什么还是产生重复数据?
    supOS APP开发者课程练习册
    如何理解Spring的IOC和AOP
    Nexus私服仓库Linux、Windows部署教程
    java计算机毕业设计干洗店订单管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
    VS Code 自动选择Python3 venv
    【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用
  • 原文地址:https://blog.csdn.net/wuyomhchang/article/details/134401683