Jsp技术入门指南【十四】实现基于MySQL+JDBC+JSP数据库验证的登录界面与登录跳转功能

Jsp技术入门指南【十四】实现基于MySQL+JDBC+JSP数据库验证的登录界面与登录跳转功能

Jsp技术入门指南【十四】实现基于MySQL+JDBC+JSP数据库验证的登录界面与登录跳转功能


前言

  • 在之前的博客中,我们详细探讨了 JSTL 中 SQL 标签库和自定义标签库的基础用法,并展示了如何利用这些标签库实现 MySQL 数据库连接以及数据分页展示功能。
  • 本文将继续深入,介绍如何基于 MySQL 数据库实现用户登录验证功能,包括登录界面设计、用户身份验证以及登录成功 / 失败后的页面跳转处理
我的个人主页,欢迎来阅读我的其他文章
https://blog.ZEEKLOG.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.ZEEKLOG.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.ZEEKLOG.net/2402_83322742/article/details/146980845?spm=1001.2014.3001.5501
Java-servlet-Web环境搭建(下)详细讲解利用maven和tomcat搭建Java-servlet环境
https://blog.ZEEKLOG.net/2402_83322742/article/details/145998804
在这里插入图片描述

第二步、创建并导入web库

在web-INF文件里创建一个lib文件,并导入我们的库文件

在这里插入图片描述


在这里插入图片描述

然后在工件里,找到web应用程序展开型,找到我们刚刚添加的MySQLweb文件

在这里插入图片描述

在MySQLtest里面添加web文件

在这里插入图片描述


在这里插入图片描述

我们新建了一个MySQLtest的模块,在里面单击右键,打开模板设置

在这里插入图片描述

第三步、连接本地数据库的java代码

  • 接着在java类里面添加以下代码

首先新建一个java类LoginServlet

在这里插入图片描述


在这里插入图片描述

LoginServlet类

packageorg.example;importjava.io.IOException;importjava.io.Serial;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@WebServlet("/LoginServlet")publicclassLoginServletextendsHttpServlet{@Serialprivatestaticfinallong serialVersionUID =1L;protectedvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException,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();}}}}

核心代码讲解

  1. 数据库连接管理
// 加载数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");// 建立数据库连接 conn =DriverManager.getConnection(url, dbUsername, dbPassword);
  • 使用JDBC连接MySQL数据库
  • 数据库连接信息硬编码在Servlet中(不推荐,后续会讲原因)
  1. SQL查询与防注入
String sql ="SELECT * FROM userspasswd WHERE username = ? AND password = ?"; stmt = conn.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password);
  • 使用预编译语句(PreparedStatement)防止SQL注入
  • 通过参数化查询提高安全性
  1. 结果处理
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存储用户信息
  • 使用重定向和转发实现页面跳转
  1. 资源管理
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

第四步、创建数据库

  • 连接数据库的代码名字要求与我们的数据库匹配一致,这里我连接了2023se3

找到部署架构,里面就有我们的数据库文件

在这里插入图片描述


在这里插入图片描述

在里面输入我们的密码和用户名

在这里插入图片描述

然后找到加号,点击数据源,找到MySQL

在这里插入图片描述

完成上面的代码之后,我们接着创建一个数据库,点击数据库按钮

在这里插入图片描述
在这里插入图片描述
  • 单击右键
  • 在数据库里根据我们的HTML表格格式创建一张表
  • 新建查询语句
在这里插入图片描述
CREATETABLE`userpasswd`(`username`VARCHAR(255)NOTNULL,`password`VARCHAR(255)NOTNULL,PRIMARYKEY(`username`))ENGINE=InnoDBDEFAULTCHARSET= utf8mb4;
  • 然后加入数据
INSERTINTO`userpasswd`(username, password)VALUES('1','123'),('root','123456'),
在这里插入图片描述

第五步、导入并修改JSP登录文件

  • 在web下,我们单击右键新建一个jsp文件,名字为login.jsp

  • 然后在里面加入我们的HTML文件
<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1"><metaname="description"content=""><metaname="author"content=""><title>Sphinx - Login</title><linkhref="css/bootstrap.min.css"rel="stylesheet"><linkhref="css/login.css"rel="stylesheet"><linkhref="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><divclass="container"><divclass="row login"><divclass="col-md-4 col-md-offset-4"><divclass="panel panel-default"><divclass="panel-heading"><h4class="panel-title text-center login-title"> pha-Admin 登录 </h4></div><divclass="panel-body"><formaction="LoginServlet"method="post"role="form"><fieldset><divclass="form-group"><divclass="input-group"><spanclass="input-group-addon"id="username"><iclass="glyphicon glyphicon-user"></i></span><inputtype="text"class="form-control"name="username"placeholder="用户名"aria-describedby="username"></div></div><divclass="form-group"><divclass="input-group"><spanclass="input-group-addon"id="password"><iclass="glyphicon glyphicon-lock"></i></span><inputtype="password"class="form-control"name="password"placeholder="密码"aria-describedby="password"></div></div><divclass="checkbox"><labelclass="login-remember"><inputname="remember"type="checkbox"value="Remember Me"> 记住我 </label></div><inputtype="submit"class="btn btn-success btn-block"value="登录"></fieldset></form></div></div></div></div></div><scriptsrc="js/jquery.js"></script><scriptsrc="js/bootstrap.min.js"></script></body></html>
在这里插入图片描述
  • 修改HTML里面from表单文件,连接我们的LoginServlet类
在这里插入图片描述
<formrole="form">
<formaction="LoginServlet"method="post"role="form">

在HTML里面的input输入字段加入name="username"和name="password",这些数据会被提交到服务器

在这里插入图片描述
在这里插入图片描述
  • 将HTML文件提交按钮改为<input type="submit">,点击后会将表单数据(用户名和密码)发送到LoginServlet进行处理
在这里插入图片描述
在这里插入图片描述


最后运行项目

在这里插入图片描述

我们的HTML文件就只有数据库里面的用户和密码才能进行登录跳转了


以上就是这篇博客的全部内容,下一篇我们将继续探索JSP的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.ZEEKLOG.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.ZEEKLOG.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482
非常感谢您的阅读,喜欢的话记得三连哦
在这里插入图片描述

Read more

他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!

他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!

个人主页-爱因斯晨 文章专栏-赛博算命 原来我们在已往的赛博算命系列文章中的源码已经传到我的Github仓库中,有兴趣的家人们可以自己运行查看。 Github 源码中的一些不足,还恳请业界大佬们批评指正! 本文章的源码已经打包至资源绑定,仓库中也同步更新。 一、引言 在数字化浪潮席卷全球的当下,传统塔罗牌占卜这一古老智慧也迎来了新的表达形式 ——“赛博塔罗”。本文档旨在深入剖析塔罗牌的核心原理,并详细介绍如何利用 Java 语言实现一个简易的塔罗牌预测程序,展现传统神秘学与现代编程技术的融合。 二、塔罗牌原理 (一)集体潜意识与原型理论 瑞士心理学家卡尔・荣格提出的 “集体潜意识” 理论,为塔罗牌的运作提供了重要的心理学支撑。该理论认为,人类拥有超越个体经验的共同心理结构,其中蕴含着 “原型”—— 即普遍存在的、象征性的模式或形象。 塔罗牌的 22 张大阿尔卡那牌恰好与这些基本原型相对应。例如,“愚人” 代表着天真与新开始的原型,“魔术师” 象征着创造力与潜能的原型,“女祭司” 则体现了智慧与直觉的原型。这些原型是全人类共通的心理元素,这也正是不同文化背景的人都能

By Ne0inhk

openclaw新手入门指南:一文看懂环境搭建、模型配置与 WebUI 远程访问

目录 * 1. 基础设施层:OpenClaw 运行环境的初始化 * 2. 算力与模型层:蓝耘 MaaS 平台的接入配置 * 2.1 协议适配与 JSON 配置 * 3. 编排层:OpenClaw 初始化与 Onboarding 流程 * 3.1 模式选择与基础设置 * 3.2 模型提供商与应用集成策略 * 3.3 技能库(Skills)装载与服务启动 * 4. 网络架构与网关(Gateway)配置 * 4.1 网关暴露与安全策略 * 4.2 Web UI 远程访问与设备配对(Device Pairing) * 5. 高级模型编排与 JSON 配置深度解析

By Ne0inhk
Flutter 三方库 flutter_dropzone 的鸿蒙化适配指南 - 掌握万物皆可拖拽的资源流转技术、助力鸿蒙大屏与 Web 应用构建极致直观的文件导入与交互体系

Flutter 三方库 flutter_dropzone 的鸿蒙化适配指南 - 掌握万物皆可拖拽的资源流转技术、助力鸿蒙大屏与 Web 应用构建极致直观的文件导入与交互体系

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 flutter_dropzone 的鸿蒙化适配指南 - 掌握万物皆可拖拽的资源流转技术、助力鸿蒙大屏与 Web 应用构建极致直观的文件导入与交互体系 前言 在 OpenHarmony 鸿蒙应用全场景覆盖、特别是适配鸿蒙桌面模式(Desktop Mode)、折叠屏大屏交互及鸿蒙 Web 版推送的工程实战中,“文件拖拽(Drag and Drop)”已成为提升生产力效率的标配功能。用户希望能够像在 PC 上一样,直接将图片或文档拖入应用窗口即可完成上传。如何实现这种跨越边界的直观交互?flutter_dropzone 作为一个专注于“拖放区域感知与文件流提取”的库,旨在为鸿蒙开发者提供一套标准的拖放治理方案。本文将详述其在鸿蒙端的实战技法。 一、原原理分析 / 概念介绍 1.1 基础原理 flutter_dropzone

By Ne0inhk
用 龙虾10 分钟搞定 C 语言 + 前端实训?我试了,真香!

用 龙虾10 分钟搞定 C 语言 + 前端实训?我试了,真香!

🚀 用龙虾10 分钟搞定 C 语言 + 前端实训?我试了,真香! 一句话总结:选对模型 + 写好提示词,让“龙虾”帮你从零生成可运行的 C 语言成绩管理系统 + 全栈博客前端项目,连实训报告都自动生成! 大家好,我是 VON。最近“AI 编程助手”火出圈,但很多人还在手动敲代码、调 Bug、写报告……其实,只要用对工具,一个指令就能完成整套高校实训作业! 今天我就带大家实测:如何用 AI 智能体(俗称“龙虾”) 快速搞定两类典型课程设计—— ✅ C 语言学生成绩管理系统 ✅ React 全栈个人博客系统 全程无需打开 IDE,甚至不用看一行代码!👇 🔧 第一步:选对模型,效率翻倍! 智能体的输出质量,70%

By Ne0inhk