基础实践:使用JQuery Ajax调用Servlet

前言

本博客介绍最简单的JQuery(原生JS的封装库)使用Ajax发送请求,并通过对应的servlet响应数据,并在页面显示,并且servlet响应的数据来自MySQL数据库。

实现需求:在前端页面的输入框中输入要注册的用户名,动态查询数据库中指定用户名是否存在,若存在给出提示,若不存在也给出相应提示。

项目结构

 数据库的SQL支持

本项目使用原生的JDBC连接MySQL数据库,并进行操作,为了简化开发,封装了操作JDBC的工具类

数据库表

这个数据库表,是我沿用以前存在的项目中的表,实际上如果创建一个符合当前项目的用户表只需要保留基本字段user_id(用户id,唯一标识),user_name(用户名)

 本来应该创建一个实体类与数据库表相对应,但是现在省略了,因为只是演示简单字符串对比,不需要拿实体类接收数据库传回的数据。

导入JDBC工具类,并书写DAO层

DBUtil

连接自己的数据库

package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class DBUtil {private final static String DRIVER="com.mysql.cj.jdbc.Driver";private final static String URL="jdbc:mysql://localhost:3306/csx_demo?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull";private final static String DBNAME="root";private final static String DBPASS="root";public static Connection getConn(){Connection conn=null;try {Class.forName(DRIVER);conn= DriverManager.getConnection(URL,DBNAME,DBPASS);}catch (Exception e){e.printStackTrace();}return conn;}public static void closeAll(Connection conn, Statement st, ResultSet rs){try {if (rs!=null){rs.close();}if (st!=null){st.close();}if (conn!=null){conn.close();}}catch (Exception e){e.printStackTrace();}}}

UserDao

package dao;public interface UserDao {boolean checkUserName(String username);
}

UserDaoImpl

判断用户名是否存在,若存在返回true,不存在返回false

package dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class UseDaoImpl extends DBUtil implements UserDao{Connection conn=null;PreparedStatement pstmt=null;ResultSet rs=null;@Overridepublic boolean checkUserName(String username) {conn=getConn();boolean flag=false;try {String sql="select user_name from t_user where user_name = ?";pstmt=conn.prepareStatement(sql);pstmt.setString(1,username);rs=pstmt.executeQuery();if (rs.next()){flag=true;}} catch (SQLException e) {throw new RuntimeException(e);}return flag;}
}

创建过滤器,保证编解码字符集保持一致

EncodingFilter

将所有请求拦截下来,设置统一字符集(UTF-8)

package filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*")
public class EncodingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("UTF-8");servletResponse.setCharacterEncoding("UTF-8");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}
}

创建前端页面,使用JQuery发生Ajax请求给servlet

reg.html

  • type:指定请求的方式为post
  • url:请求的servlet路径
  • data:传入servlet的参数
  • msg:代表servlet响应的数据
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<script src="https://cdn.staticfile.net/jquery/1.10.2/jquery.min.js"></script>
<body><body>
注册账号: <input type="text" id="username" name="username"> <span id="usermsg"></span>
</body>
<script>$(function(){$("#username").blur(function(){$.ajax({type:'POST',url:'/checkName',data:{username:$("#username").val()},success:function(msg){if(msg=="true"){$("#usermsg").html("用户名已占用").css("color","red");}else{$("#usermsg").html("用户名可以使用").css("color","green");}}});});})</script></body>
</html>

创建Servlet获取页面发送的参数,并响应

CheckNameServlet

注意:因为前端页面和后端的java的数据类型并不是通用的,因此需要将数据转换成字符串类型进行传递;servlet通过PrintWriter将数据返回给页面的msg

package servlet;import dao.UseDaoImpl;
import dao.UserDao;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;@WebServlet("/checkName")
public class CheckNameServlet  extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username= request.getParameter("username");UserDao userDao=new UseDaoImpl();boolean result= userDao.checkUserName(username);response.setContentType("text/html;charset=UTF-8");PrintWriter out= response.getWriter();if (result){response.setContentType("text/html;charset=UTF-8");out= response.getWriter();out.print("true");}else{out.print("false");}}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}

项目演示效果

reg.html页面

如果账号存在:

如果账号不存在:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147609.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

依赖库查看工具Dependencies

依赖库查看工具&#xff1a;Dependencies Dependencies 是一款 Windows 平台下的静态分析工具&#xff0c;用来分析可执行文件&#xff08;EXE、DLL 等&#xff09;所依赖的动态链接库&#xff08;DLL&#xff09;。它可以帮助开发者和系统管理员快速查找程序在运行时可能缺少的…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进&#xff1a;全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

论文浅尝 | KAM-CoT: 利用知识图谱进行知识增强的多模态链式推理(AAAI2024)

笔记整理&#xff1a;沈小力&#xff0c;东南大学硕士&#xff0c;研究方向为多模态大预言模型、知识图谱 论文链接&#xff1a;https://arxiv.org/abs/2401.12863 发表会议&#xff1a;AAAI2024 1. 动机 本文探索了知识图谱在扩展大语言模型的多模态能力的效果&#xff0c;提出…

在jupyter notebook中取消代理服务器的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

使用GPU 加速 Polars:高效解决大规模数据问题

Polars 最近新开发了一个可以支持 GPU 加速计算的执行引擎。这个引擎可以对超过 100GB 的数据进行交互式操作能。本文将详细讨论 Polars 中DF的概念、GPU 加速如何与 Polars DF协同工作&#xff0c;以及使用新的 CUDA 驱动执行引擎可能带来的性能提升。 Polars 核心概念 Polar…

go libreoffice word 转pdf

一、main.go 关键代码 完整代码 package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""os/exec""path/filepath" ) import _ "github.com/go-sql-driver/mysql"import &q…

多态与绑定例题

答案&#xff1a; B D C 知识点&#xff1a; 多态是相同方法不同的表现&#xff0c;分为重写和重载 重写体现在父类与子类不同表现&#xff0c;主要表现为子类重现父类的方法 重载体现在同一个类中的不同表现 绑定分为动态绑定和静态绑定 动态绑定是在运行时 静态绑定是…

java23发布啦

2024年9月java23发布啦&#xff01;&#xff01;! JDK 23 提供了12 项增强功能&#xff0c;这些功能足以保证其自己的JDK 增强提案 - JEP &#xff0c;其中包括 8 项预览功能和 1 项孵化器功能。它们涵盖了对 Java 语言、API、性能和 JDK 中包含的工具的改进。除了 Java 平台上…

《独孤九剑》游戏源码(客户端+服务端+数据库+游戏全套源码)大小2.38G

《独孤九剑》游戏源码&#xff08;客户端服务端数据库游戏全套源码&#xff09;大小2.38G ​ 下载地址&#xff1a; 通过网盘分享的文件&#xff1a;【源码】《独孤九剑》游戏源码&#xff08;客户端服务端数据库游戏全套源码&#xff09;大小2.38G 链接: https://pan.baidu.co…

走在时代前沿:让ChatGPT成为你的职场超级助手

在当今快节奏的工作环境中&#xff0c;时间和效率是宝贵的资源。人工智能&#xff08;AI&#xff09;&#xff0c;尤其是自然语言处理技术的进步&#xff0c;为我们提供了强大的工具来优化工作流程。ChatGPT&#xff08;Generative Pre-trained Transformer&#xff09;就是其中…

计算机毕业设计之:基基于微信小程序的轻食减脂平台的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

PostgreSQL技术内幕10:PostgreSQL事务原理解析-日志模块介绍

文章目录 0.简介1.PG日志介绍2.事务日志介绍3.WAL分析3.1 WAL概述3.2 WAL设计考虑3.2.1 存储格式3.2.2 实现方式3.2.3 数据完整性校验3.3 check ponit 4.事务提交日志&#xff08;CLOG&#xff09;4.1 clog存储使用介绍4.2 slru缓冲池并发控制 0.简介 本文将延续上一篇文章内容…

59.【C语言】内存函数(memmove函数)

目录 2.memove函数 *简单使用 部分翻译 *模拟实现 方案1 方案2 1.有重叠 dest在src左侧 dest在src右侧 2.无重叠 代码 2.memove函数 *简单使用 memove:memory move cplusplus的介绍 点我跳转 对比第59篇的memcpy函数 对比memmcpy函数的介绍如下区别: 部分翻译 m…

金刚石切削工具学习笔记分享

CVD钻石-合成单晶钻石之一 金刚石具有极高的硬度和耐磨性、较低的摩擦系数、较高的弹性模量、较高的热导率、较低的热膨胀系数、与有色金属的亲和力较小等优点&#xff0c;是目前最硬的工具材料&#xff0c;主要分为单晶金刚石和聚晶金刚石两大类。单晶金刚石又分为天然单晶金…

常用卫星学习

文章目录 Landsat-8 Landsat-8 由一台操作陆地成像仪 &#xff08;OLI&#xff09; 和一台热红外传感器 &#xff08;TIRS&#xff09;的卫星&#xff0c;OLI 提供 9 个波段&#xff0c;覆盖 0.43–2.29 μm 的波长&#xff0c;其中全色波段&#xff08;一般指0.5μm到0.75μm左…

CentOS Stream 9部署MariaDB

1、更新系统软件包 sudo dnf update 2、安装MariaDB软件包&#xff08;替代mysql&#xff09; sudo dnf install mariadb-server 3、安装MariaDB服务 sudo systemctl enable --now mariadb 4、检查MariaDB服务状态 sudo systemctl status mariadb 5、配置MariaDB安全性 sudo my…

锐捷 睿易路由器存在RCE漏洞

漏洞描述 锐捷Ruijie路由器命令执行漏 漏洞复现 FOFA: icon_hash"-399311436" 点击左下角的“网络诊断”&#xff0c;在“Tracert检测”的“地址”框中&#xff0c;输入127.0.0.1;ls&#xff0c;接着点击“开始检测”&#xff0c;会在检测框中回显命令执行结果。…

代码编辑器 —— SourceInsight实用技巧

目 录 Source insight 重要性一、创建项目二、代码浏览三、代码同步 Source insight 重要性 Source Insight 是一款功能强大的代码编辑器&#xff0c;在软件开发中占据着重要地位。 Source Insight 能够帮助开发者更高效地解读和修改代码&#xff0c;提高开发效率和代码质量。…

LeetCode_sql_day31(1384.按年度列出销售总额)

目录 描述 1384.按年度列出销售总额 数据准备 分析 法一 法二 代码 总结 描述 1384.按年度列出销售总额 Product 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | var…

CentOS Stream 9部署docker,并开启API

1、安装docker &#xff08;1&#xff09;安装Docker的依赖项和存储库 sudo dnf install -y dnf-plugins-core sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &#xff08;2&#xff09;安装Docker sudo dnf install -y docke…