Ajax登录验证实现代码
作者:wbcra 发布时间:2022-02-22 10:47:51
标签:Ajax,登录验证
package cn.hp.util;
import java.sql.*;
public class JDBCUtils {
static Connection connection = null ;
static Statement statement = null ;
static PreparedStatement preparedStatement = null ;
static ResultSet resultSet = null ;
static{
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_system?characterEncoding=utf8&serverTimezone=UTC", "root", "root");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
// 新增和修改 DML 操作 String sql , sql中的参数 preparedStatement Object[] arr 用来补全sql中的?
public static int DML(String sql , Object[] arr ){ // 可变参数 Object ... arr 0~n个参数
int update = 0 ;
try{
preparedStatement = connection.prepareStatement(sql);
// 循环完毕,会将sql中全部? 补充齐
for (int i = 0 ; i < arr.length ; i++){
preparedStatement.setObject(i+1 , arr[i] );
}
update = preparedStatement.executeUpdate();
}catch (SQLException e){
e.printStackTrace();
}
return update ;
}
// 带参查询 DQL 操作
public static ResultSet DQL(String sql , Object[] arr ){
try{
preparedStatement = connection.prepareStatement(sql);
// 循环完毕,会将sql中全部? 补充齐
for (int i = 0 ; i < arr.length ; i++){
preparedStatement.setObject(i+1 , arr[i] );
}
resultSet = preparedStatement.executeQuery();
}catch (SQLException e){
e.printStackTrace();
}
return resultSet ;
}
// 单独提供关闭资源方法
public static void close(){
try {
if (statement!=null){
statement.close();
}
if (connection!= null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package cn.hp.service;
import cn.hp.dao.UserDao;
public class UserService {
public boolean login(String account, String password) {
//service层,依赖于dao层 制定某一条sql执行
UserDao userDao = new UserDao();
int select = userDao.selectByAccountAndPassword(account ,password);
if (select>0){
return true;
}else {
return false;
}
}
public boolean check(String account) {
//service层,依赖于dao层 制定某一条sql执行
UserDao userDao = new UserDao();
int select = userDao.selectByAccount(account);
if (select>0){
return true;
}else {
return false;
}
}
}
package cn.hp.servlet;
import cn.hp.service.UserService;
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;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.设置用户输入的编码格式,因为有可能是中文
req.setCharacterEncoding("utf-8");
//2.获取用户数输入的内容
String account = req.getParameter("account");
String password = req.getParameter("password");
//3.依据service来判断当前登录的账号密码是否正确
//User表 定义一个UserService 用来处理 所有和user有关的业务
UserService userService = new UserService();
//login方法传入账号密码 返回是否登录成功
boolean flag = userService.login(account,password);
//4.依据是否登录成功,进行控制页面的跳转
if (flag){
req.getRequestDispatcher("success.jsp").forward(req,resp);
}else {
req.setAttribute("msg","密码错误,请重新登录!");
req.getRequestDispatcher("login.jsp").forward(req,resp);
}
}
}
package cn.hp.servlet;
import cn.hp.service.UserService;
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;
@WebServlet("/check")
public class CheckServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.设置用户输入的编码格式,因为有可能是中文
req.setCharacterEncoding("utf-8");
//2.获取用户数输入的内容
String account = req.getParameter("account");
//3.依据service来判断当前登录的账号密码是否正确
//User表 定义一个UserService 用来处理 所有和user有关的业务
UserService userService = new UserService();
//使用check方法 检出是否存在用户 true 存在用户 false 不存在
boolean flag = userService.check(account);
resp.getWriter().println(flag);
}
}
package cn.hp.dao;
import cn.hp.util.JDBCUtils;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
public int selectByAccountAndPassword(String account, String password) {
//执行select查询sql语句
String sql = "select count(*) from user where account = ? and password = ?";
Object[] objects = {account , password};
ResultSet resultSet = JDBCUtils.DQL(sql,objects);
int select = 0;
try {
while (resultSet.next()){
select = resultSet.getInt(1);
}
}catch (SQLException e){
e.printStackTrace();
}
return select;
}
public int selectByAccount(String account) {
//执行select查询sql语句
String sql = "select count(*) from user where account = ? ";
Object[] objects = {account };
ResultSet resultSet = JDBCUtils.DQL(sql,objects);
int select = 0;
try {
while (resultSet.next()){
select = resultSet.getInt(1);
}
}catch (SQLException e){
e.printStackTrace();
}
return select;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页</title>
<script src="js/jquery-3.6.0.js"></script>
</head>
<body>
<form action="login">
账号:<input id="input1" type="text" name="account" /> <span id="span1"></span> <br/>
密码:<input type="password" name="password" /> <span style="color:red"> ${msg } </span><br/>
<input type="submit" value="登录"/>
</form>
</body>
<script>
// 使用jQuery完成ajax校验 ,当前账号是否存在
$("#input1").blur(function () {
// 发送ajax请求,获取到当前输入的账号是否存在,写入到span1标签中
let account = $("#input1").val();
$.ajax({
url:"check",
// data:{"account":$("#input1").val() },
data:"account="+account ,
type:"get",
success:function (data) {
let data1 = JSON.parse(data);
if (data1){
// 表示存在当前账号
// 可以登录
$("#span1").html("可以登录");
$("#span1").attr("style","color:green");
}else {
$("#span1").html("未注册");
$("#span1").attr("style","color:red");
}
}
})
})
</script>
</html>
来源:https://blog.csdn.net/wbcra/article/details/118014948
0
投稿
猜你喜欢
- 这篇文章主要介绍了Java 比较接口comparable与comparator区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作
- SQLite 介绍SQLite,是一款轻型的数据库,用于本地的数据储存。先说说优点,它占用资源非常的低,在嵌入式设备中需要几百K的内存就够了
- Token 一定要放在请求头中吗? 答案肯定是否定的,本文将从源码的角度来分享一下 spring security oauth2 的解析过程
- 博主在初学注解的时候看到网上的介绍大部分都是直接介绍用法或者功能,没有实际的应用场景,篇幅又很长导致学习的时候难以理解其意图,而且学完就忘Q
- 一、作用及种类UML类图建模语言或标准建模语言类的属性、操作中的可见性使用+、#、-分别表示public、protected、private
- 本文实例讲述了C#中动态数组用法。分享给大家供大家参考。具体分析如下:ArrayList是一种动态数组,其容量可随着我们的需要自动进行扩充.
- 最近接触到一个需求要求压缩导出文件,于是乎便要致力于研究一下工具类啦,故也诞生了此篇文章。下面代码中,溪源也将import导入的依赖也贴出来
- 导语在使用flutter 自带图片组件的过程中,大家有没有考虑过flutter是如何加载一张网络图片的? 以及对自带的图片组件我们可以做些什
- 首先,良好的编码规范非常重要。在 java 程序中,访问速度、资源紧张等问题的大部分原因,都是代码不规范造成的。单例的使用场景单例模式对于减
- GET请求不支持对象传参问题@GetMapping("/getByParam")String hello(Student
- Java的在还没有发现新写法之前时,我一直是这么初始化List跟Map://初始化List List&l
- 在开发过程中.数组和集合的处理是最让我们担心.一般会用for or foreach 来处理一些操作.这里介绍一些常用的集合跟数组的操作函数.
- 目录1、两阶段终止模式介绍2、Terminator代码演示3、TerminationRequester4、模拟客户端或者服务端都可能终止服务
- kotlin是一门基于jvm的编程语言,最近进行了关于kotlin和 anko的研究。并且结合现在的APP设计模式,设想了初步的开发方式。并
- 匿名内部类:先举个例子吧,给大家看一下什么是匿名内部类,Endeavor刚刚接触的时候,觉得哇哦,好奇怪的样子,这也太别扭了吧,不知道大家是
- 本文实例讲述了C#画笔Pen绘制光滑模式曲线的方法。分享给大家供大家参考。具体实现方法如下:using System;using Syste
- Mybatis mapper模糊查询语句LIKE最近做学校安排的课程设计作业,用到SSM框架,在自己写mapper代码是遇到了模糊查询的问题
- 包的作用,1是为了防止类和方法的重名,2是为了管理众多的java类。步骤 1 工具包里面有很多个工具类之前讲了打印数据的方法:S
- javax.el.ELException的解决方式failed to parse the expression [${xxx}]Tomcat
- 概念代理:为控制A对象,而创建出新B对象,由B对象代替执行A对象所有操作,称之为代理。一个代理体系建立涉及到3个参与角色:真实对象(A),代