当前位置: 首页 > news >正文

利用HttpServlet完成MySql数据库my_user表的登录校验

功能:利用HttpServlet完成MySql数据库my_user表的登录校验

step1:在porm.xml文件中导jdbc的依赖

mysql数据库输入

SELECT VERSION()

查询当前的数据库版本

 maven官网网址;https://mvnrepository.com/

maven官网中搜索:mySQL

并复制依赖粘贴到pom文件中

main函数下java包的class类

package com.iweb.demo03;import org.apache.commons.codec.digest.DigestUtils;import javax.servlet.RequestDispatcher;
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.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;@WebServlet(value = "/login")
public class Login extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html");PrintWriter pw = resp.getWriter();String username = req.getParameter("username");String password = req.getParameter("password");password = DigestUtils.md5Hex(password);String sql = "select count(*) cou from my_user m " +"where m.username=? and m.password=?";List<Map<String, Object>> list = null;try {list = JDBCUtill.jdbcBySelect(sql, username, password);} catch (SQLException e) {throw new RuntimeException(e);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}Map<String, Object> map = list.get(0);long cou = (long) map.get("cou");String path="";if (cou > 0) {/* pw.print("欢迎您"+username);//页面跳转*//* resp.sendRedirect("/demo03/test5.html");*/path=req.getContextPath() + "/test5.html";System.out.println("登录成功");} else {path=req.getContextPath()+"/login.html?islogin=0";}resp.sendRedirect(path);}
}

html文件 :

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户登陆</title><script type="text/javascript">window.onload = function () {var urlParams = new URLSearchParams(window.location.search);var islogin = urlParams.get("islogin")if (islogin == 0) {alert("用户名或密码错误")}}</script>
</head>
<body>
<h3>用户登陆</h3>
<form method="post" action="login">账号<input type="text" name="username"><br/><br/>密码<input type="text" name="password"/><br/><br/><input type="submit" value="提交"/><br/>
</form>
<br/></body>
</html>

附录:

JDBC文件: 

package com.iweb.demo03;//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class JDBCUtill {static Connection conn;static PreparedStatement pstat;static ResultSet rest;public JDBCUtill() {}private static void getSource() throws SQLException, ClassNotFoundException {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://192.168.77.100:3306/mysql?characterEncoding=utf-8", "root", "123456");}private static void closeSource() throws SQLException {if (rest != null) {rest.close();}if (pstat != null) {pstat.close();}if (conn != null) {conn.close();}}public static List<Map<String, Object>> jdbcBySelect(String sql) throws SQLException, ClassNotFoundException {List<Map<String, Object>> list = new ArrayList();getSource();pstat = conn.prepareStatement(sql);rest = pstat.executeQuery();ResultSetMetaData rsmd = rest.getMetaData();int columnCount = rsmd.getColumnCount();while(rest.next()) {Map<String, Object> map = new HashMap();for(int i = 1; i <= columnCount; ++i) {String columnName = rsmd.getColumnName(i);Object columnValue = rest.getObject(i);map.put(columnName, columnValue);}list.add(map);}closeSource();return list;}public static List<Map<String, Object>> jdbcBySelect(String sql, String username, String password) throws SQLException, ClassNotFoundException {List<Map<String, Object>> list = new ArrayList();getSource();pstat = conn.prepareStatement(sql);pstat.setString(1, username);pstat.setString(2, password);rest = pstat.executeQuery();ResultSetMetaData rsmd = rest.getMetaData();int columnCount = rsmd.getColumnCount();while(rest.next()) {Map<String, Object> map = new HashMap();for(int i = 1; i <= columnCount; ++i) {String columnName = rsmd.getColumnName(i);Object columnValue = rest.getObject(i);map.put(columnName, columnValue);}list.add(map);}closeSource();return list;}public static <E> int updateBySql(String sql, E... e) throws SQLException, ClassNotFoundException {getSource();int res=0 ;pstat = conn.prepareStatement(sql);for(int i = 0; i < e.length; ++i) {pstat.setObject(i + 1, e[i]);}res = pstat.executeUpdate();closeSource();return res;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 算法学习day29
  • AWS生成式AI项目的全生命周期管理
  • Qt pro文件详解
  • 掌握Dism++,让你的Windows系统更加清爽、流畅!
  • MyIP:强大且简单好用!
  • Langchain-Chatchat+Xinference集成部署
  • 【线性代数】汤家凤线性代数辅导讲义整理
  • Java中基本数据类型包装类的常量池缓存的值得范围是多少?
  • Linux:账号和权限管理(二)
  • 掀起 .NET 风暴:用 Docker 快速打造并部署你的炫酷应用!
  • the request was rejected because no multipart boundary was found
  • FP8量化
  • 精益生产管理培训机构怎么选?三大维度助你精准定位
  • 从科幻到现实:AIGC助力打造个性化数字人
  • MySQL:先插入数据库,然后再查询
  • 【刷算法】求1+2+3+...+n
  • Angular4 模板式表单用法以及验证
  • Apache Pulsar 2.1 重磅发布
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JavaScript设计模式之工厂模式
  • java取消线程实例
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Vultr 教程目录
  • 百度地图API标注+时间轴组件
  • 前端相关框架总和
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 入口文件开始,分析Vue源码实现
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 网页视频流m3u8/ts视频下载
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 项目管理碎碎念系列之一:干系人管理
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​Java基础复习笔记 第16章:网络编程
  • (007)XHTML文档之标题——h1~h6
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (原创)可支持最大高度的NestedScrollView
  • (转)创业家杂志:UCWEB天使第一步
  • (转)可以带来幸福的一本书
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .htaccess配置常用技巧
  • .Net core 6.0 升8.0
  • .NET Core中的时区转换问题
  • .net Signalr 使用笔记
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .Net多线程Threading相关详解
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET业务框架的构建
  • @ConditionalOnProperty注解使用说明
  • @Value读取properties中文乱码解决方案
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [ SNOI 2013 ] Quare
  • [<MySQL优化总结>]