前言
- 在之前的博客中,我们详细探讨了 JSTL 中 SQL 标签库和自界说标签库的底子用法,并展示了如何使用这些标签库实现 MySQL 数据库毗连以及数据分页展示功能。
- 本文将继续深入,先容如何基于 MySQL 数据库实现用户登录验证功能,包罗登录界面设计、用户身份验证以及登录成功 / 失败后的页面跳转处置惩罚。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不敷
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482
标题要求
- 使用MySQL+JSP+JDBC内容,完成前后端毗连,实现基于MySQL数据库验证的登录界面与登录跳转功能
- 当用户输入数据库里面的用户名和密码时,才可举行跳转
下面我们来实际操作一下
第一步:加入驱动包与Maven
- 起首我们按照之前的那样加入jsp,jdbc的驱动包来构建环境
- <dependencies>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>javax.servlet.jsp</groupId>
- <artifactId>javax.servlet.jsp-api</artifactId>
- <version>2.3.3</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>8.0.33</version>
- </dependency>
- <!-- jstl表达式依赖-->
- <dependency>
- <groupId>javax.servlet.jsp.jstl</groupId>
- <artifactId>jstl-api</artifactId>
- <version>1.2</version>
- </dependency>
- <!-- taglibs 标签库依赖-->
- <dependency>
- <groupId>taglibs</groupId>
- <artifactId>standard</artifactId>
- <version>1.1.2</version>
- </dependency>
- </dependencies>
复制代码
- 接着我们必要设置好自己的maven环境
- maven环境必须是全英文,否则运行不了
maven官方网站https://maven.apache.org/
我的jsp环境搭建博客
JSP技术入门指南【一】使用IDEA从零开始搭建你的第一个JSP系统
https://blog.csdn.net/2402_83322742/article/details/146980845?spm=1001.2014.3001.5501
Java-servlet-Web环境搭建(下)详细解说使用maven和tomcat搭建Java-servlet环境
https://blog.csdn.net/2402_83322742/article/details/145998804
第二步、创建并导入web库
- 我们新建了一个MySQLtest的模块,在里面单击右键,打开模板设置
- 在MySQLtest里面添加web文件
- 然后在工件里,找到web应用步伐睁开型,找到我们刚刚添加的MySQLweb文件
- 在web-INF文件里创建一个lib文件,并导入我们的库文件
第三步、毗连本地数据库的java代码
- 起首新建一个java类LoginServlet
- 接着在java类里面添加以下代码
LoginServlet类
- package org.example;
- import java.io.IOException;
- import java.io.Serial;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @WebServlet("/LoginServlet")
- public class LoginServlet extends HttpServlet {
- @Serial
- private static final long serialVersionUID = 1L;
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String username = request.getParameter("username");
- String password = request.getParameter("password");
- // 数据库连接信息
- String url = "jdbc:mysql://localhost:3306/2023se3";
- String dbUsername = "root";
- String dbPassword = "123456";
- Connection conn = null;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- try {
- // 加载数据库驱动
- Class.forName("com.mysql.cj.jdbc.Driver");
- // 建立数据库连接
- conn = DriverManager.getConnection(url, dbUsername, dbPassword);
- // 查询用户信息
- String sql = "SELECT * FROM userspasswd WHERE username = ? AND password = ?";
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, username);
- stmt.setString(2, password);
- rs = stmt.executeQuery();
- if (rs.next()) {
- String displayName = rs.getString("username"); // 获取数据库中的显示名
- request.getSession().setAttribute("displayName", displayName); // 存入会话
- response.sendRedirect("index.jsp");
- } else {
- // 登录失败,返回登录页并给出提示
- request.setAttribute("error", "用户名或密码错误");
- request.getRequestDispatcher("login.jsp").forward(request, response);
- }
- } catch (ClassNotFoundException | SQLException e) {
- e.printStackTrace();
- // 数据库连接或查询出错,返回登录页并给出提示
- request.setAttribute("error", "数据库连接出错,请稍后再试");
- request.getRequestDispatcher("login.jsp").forward(request, response);
- } finally {
- // 关闭数据库连接和资源
- try {
- if (rs != null) rs.close();
- if (stmt != null) stmt.close();
- if (conn != null) conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
复制代码 核心代码解说
- // 加载数据库驱动
- Class.forName("com.mysql.cj.jdbc.Driver");
- // 建立数据库连接
- conn = DriverManager.getConnection(url, dbUsername, dbPassword);
复制代码
- 使用JDBC毗连MySQL数据库
- 数据库毗连信息硬编码在Servlet中(不保举,后续会讲缘故原由)
- String sql = "SELECT * FROM userspasswd WHERE username = ? AND password = ?";
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, username);
- stmt.setString(2, password);
复制代码
- 使用预编译语句(PreparedStatement)防止SQL注入
- 通过参数化查询提高安全性
- if (rs.next()) {
- String displayName = rs.getString("username");
- request.getSession().setAttribute("displayName", displayName);
- response.sendRedirect("index.jsp");
- } else {
- request.setAttribute("error", "用户名或密码错误");
- request.getRequestDispatcher("login.jsp").forward(request, response);
- }
复制代码
- 通过ResultSet判定是否查询到用户记载
- 使用Session存储用户信息
- 使用重定向和转发实现页面跳转
- finally {
- try {
- if (rs != null) rs.close();
- if (stmt != null) stmt.close();
- if (conn != null) conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
复制代码
- 在finally块中关闭数据库资源
- 按逆序关闭ResultSet、Statement和Connection
第四步、创建数据库
- 完成上面的代码之后,我们接着创建一个数据库,点击数据库按钮
- 然后找到加号,点击数据源,找到MySQL
- 在里面输入我们的密码和用户名
- 找到摆设架构,里面就有我们的数据库文件
- 毗连数据库的代码名字要求与我们的数据库匹配一致,这里我毗连了2023se3
- 单击右键
- 在数据库里根据我们的HTML表格格式创建一张表
- 新建查询语句
- CREATE TABLE `userpasswd` (
- `username` VARCHAR(255) NOT NULL,
- `password` VARCHAR(255) NOT NULL,
- PRIMARY KEY (`username`)
- ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
复制代码
- INSERT INTO `userpasswd` (username, password) VALUES
- ('1', '123'),
- ('root', '123456'),
复制代码
第五步、导入并修改JSP登录文件
- 在web下,我们单击右键新建一个jsp文件,名字为login.jsp

- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="description" content="">
- <meta name="author" content="">
- <title>Sphinx - Login</title>
- <link href="css/bootstrap.min.css" rel="stylesheet">
- <link href="css/login.css" rel="stylesheet">
- <link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
- <!--[if lt IE 9]>
- <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
- <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
- <![endif]-->
- </head>
- <body>
- <div class="container">
- <div class="row login">
- <div class="col-md-4 col-md-offset-4">
- <div class="panel panel-default">
- <div class="panel-heading">
- <h4 class="panel-title text-center login-title"> pha-Admin 登录 </h4>
- </div>
- <div class="panel-body">
- <form action="LoginServlet" method="post" role="form">
- <fieldset>
- <div class="form-group">
- <div class="input-group">
- <span class="input-group-addon" id="username"><i
- class="glyphicon glyphicon-user"></i></span>
- <input type="text" class="form-control" name="username" placeholder="用户名"
- aria-describedby="username">
- </div>
- </div>
- <div class="form-group">
- <div class="input-group">
- <span class="input-group-addon" id="password"><i
- class="glyphicon glyphicon-lock"></i></span>
- <input type="password" class="form-control" name="password" placeholder="密码"
- aria-describedby="password">
- </div>
- </div>
- <div class="checkbox">
- <label class="login-remember">
- <input name="remember" type="checkbox" value="Remember Me"> 记住我
- </label>
- </div>
- <input type="submit" class="btn btn-success btn-block" value="登录">
- </fieldset>
- </form>
- </div>
- </div>
- </div>
- </div>
- </div>
- <script src="js/jquery.js"></script>
- <script src="js/bootstrap.min.js"></script>
- </body>
- </html>
复制代码
- 修改HTML里面from表单文件,毗连我们的LoginServlet类
- <form action="LoginServlet" method="post" role="form">
复制代码
- 在HTML里面的input输入字段加入name="username"和name="password",这些数据会被提交到服务器
- 将HTML文件提交按钮改为<input type="submit">,点击后会将表单数据(用户名和密码)发送到LoginServlet举行处置惩罚
末了运行项目
我们的HTML文件就只有数据库里面的用户和密码才气举行登录跳转了
以上就是这篇博客的全部内容,下一篇我们将继续探索JSP的更多精彩内容。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不敷
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482
[table][/table]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |