ajax+jsp无刷新验证码

JSP Ajax实现局部刷新验证码验证 当用户点击"验证"按钮时,JavaScript代码将获取输入的验证码并通过Ajax请求将其发送到服务器上的"verifyCode.jsp"页面。通过这种方法,用户可以在不刷新整个页面的情况下验证其输入的验证码。当用户输入验证码并点击"验证"按钮时,页面将通过Ajax请求将验证码发送到服务器进行验证,并显示验证结果。然后,我们将用户输入的验证码与生成的验证码进行比较。现在,我们需要创建一个JSP页面来处理验证码的验证逻辑并返回验证结果。为了使验证码验证的例子完整,我们还需要一个生成验证码的JSP页面。 阅读详情

img.jsp:
<%@ page contentType="text/html; charset=GBK" language="java"
 import="java.sql.*" errorPage="" pageEncoding="GBK"%>
<%
 request.setCharacterEncoding("GBK");
 response.setCharacterEncoding("GBK");
 response.setContentType("text/html; charset=GBK");
%>
<html>
 <head>
  <title>图片验证</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <script src="/js/net.js"></script>
 </head>

 <body>
  AJAX(无刷新及时提示)验证码实例!
  <hr>
  <%
   String num = request.getParameter("num");
   String random = (String) session.getAttribute("random");
   String name = request.getParameter("name");
   if (num != null && random != null && name != null) {
    if (num.equals(random)) {
     out
     .println("<font style=/"color:green;font-weight:bold/">恭喜您,验证码输入成功,这里是提交结果页面,可以写入数据库了!</font> <a href=/"img.jsp/">返回再测试</a><br>");
     out.println("您的名字是:" + name);
     out.println("<br>");
     out.println("您输入的是:" + num);
     out.println("验证码是:" + random);
     out.println("</body>");
     return;//javascript:history.go(-1)
    }
   }
  %>
 <script type="text/javascript">
 var times=0;
 function subform(){
  var gtext=this.req.responseText;
   var info=document.getElementById("info");
   if(gtext.indexOf("validate_successful")!=-1){
    //info.innerHTML="<font color=green>验证码通过</font>";
    document.forms["myform"].submit();
    //当得到的值表示合法,则验证码通过。
   }else{
       times++;
     if(times>=3){//如果连接3次输入错误,则重载图片,可以防止作弊和用户看不清图片;
      info.innerHTML="接连3次输入错误。更新验证码,请重新输入";
        document.forms["myform"].num.value="";
        show(document.getElementById('random'));
        times=0;
      }else{
      info.innerHTML="第"+times+"次验证码错误,请注意区分大小写 ";
    }
   document.forms["myform"].num.select();
   }
 
 }
 function validata(obj){
  var enter=true;
  var info=document.getElementById("info");
  var msg="";
  if(obj.name.value.match(/^/s*$/g)){//如果未输入名字,提示
   msg+="请输入您的姓名<br>";enter=false
  }
  if(obj.num.value.match(/^/s*$/g)){//如果未输入验证码,提示
   msg+="请输入验证码<br>";enter=false 
  }
  if(enter==false){
     info.innerHTML=msg;
     return false;
  }
  var url="num.jsp?num="+obj.num.value;
  var newxmlhttp=new net.ContentLoader(url,subform,"","get",null,null);
  return false;
 }
 function show(o){
  //重载验证码
  var timenow = new Date().getTime();
  o.src="random.jsp?d="+timenow;
  /*
  //超时执行;
  setTimeout(function(){
   o.src="random.jsp?d="+timenow;
  }
   ,20);
   */
 }
 </script>
  <form action="img.jsp" name="myform" method="post"
   onsubmit="return validata(this);">
   您的姓名:
   <input type="text" name="name" size=10>
   (为了更好地说明此例,特加姓名一项)
   <br>
   验 证 码:
   <input type="text" name="num" size=10 maxlength="4">
   <img src="random.jsp" id="random">
   <a href="javascript:show(document.getElementById('random'))">验证码看不清</a>
   <br>
   <br>
   <input type="submit" value=" 提交 ">
   <br>
   <div id=info style="color: red; padding: 10px; font-size: 12px;"></div>
  </form>
 </body>
</html>

 

num.jsp:


<%@ page contentType="text/html; charset=GBK" language="java"
 import="java.sql.*" errorPage="" pageEncoding="GBK"%>
<%

 request.setCharacterEncoding("GBK");
 response.setCharacterEncoding("GBK");
 response.setContentType("text/html; charset=GBK");
%>
<%
 String num = request.getParameter("num");
 String random = (String) session.getAttribute("random");
 if (num != null && random != null) {
  if (!num.equals(random)) {
    out.println("<script>alert('验证码错误!请重试。')</script>");
    out.println("<script>history.go(-1)</script>");
    //response.sendRedirect("img.jsp");
   out.print("validate_failed:" + random);
  } else {
   //out.println("<center>验证成功!</center>");
   out.print("validate_successful:" + random);
  }
 }
%>

 

random.jsp:

<%@ page autoFlush="false"
 import="java.util.*,java.awt.*,java.awt.image.*,
 com.sun.image.codec.jpeg.*,java.util.*,
 java.io.File,java.io.FileOutputStream,javax.imageio.ImageIO"
 pageEncoding="GBK"%>

<%

 request.setCharacterEncoding("GBK");
 response.setCharacterEncoding("GBK");
 response.setContentType("text/html; charset=GBK");
%>
<%
 String chose = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

 char display[] = { '0', ' ', '0', ' ', '0', ' ', '0' }, ran[] = {
   '0', '0', '0', '0' }, temp;

 Random rand = new Random();

 for (int i = 0; i < 4; i++) {

  temp = chose.charAt(rand.nextInt(chose.length()));

  display[i * 2] = temp;

  ran[i] = temp;
 }

 String random = String.valueOf(display);

 session.setAttribute("random", String.valueOf(ran));
%>
<%
 Random jpgRand=new Random();
 String jpg = "d:/test/background"+(jpgRand.nextInt(8)+1)+".jpg";
%>

<%
 out.clear();
 response.setContentType("image/jpeg");
 response.addHeader("pragma", "NO-cache");
 response.addHeader("Cache-Control", "no-cache");
 response.addDateHeader("Expries", 0);
 int width = 150, height = 50;
 File _file = new File(jpg);  
    Image src = ImageIO.read(_file);  
 
 BufferedImage image = new BufferedImage(width, height,
   BufferedImage.TYPE_INT_RGB);
 Graphics g = image.getGraphics();
 //以下填充背景颜色
 g.drawImage(src, 0, 0, width, height, null);  
 //设置字体颜色
 g.setColor(Color.BLUE);
 Font font = new Font("Times New Roman",Font.PLAIN,40);
 g.setFont(font);
 g.drawString(random,width-140,height-10);
 for (int i=0;i<5;i++)
         {
    Color[] colors = {Color.BLACK,Color.BLUE,Color.CYAN,
        Color.GRAY,Color.GREEN,Color.MAGENTA,Color.ORANGE,Color.PINK,Color.RED,Color.YELLOW}; 
       int x = rand.nextInt(width);
       int y = rand.nextInt(height);
       int xl = rand.nextInt(100);
       int yl = rand.nextInt(50);
       g.setColor(colors[rand.nextInt(10)]);
       g.drawLine(x,y,x+xl,y+yl);
       g.drawOval(x,y,x+xl,y+yl);
       }
   
 //g.drawLine(15,25,50,10);
 g.dispose();
 ServletOutputStream outStream = response.getOutputStream();
 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream);
 encoder.encode(image);
 outStream.close();
%>

 

net.js:

/* namespacing object */
var net=new Object();
 
net.READY_STATE_UNINITIALIZED=0;
net.READY_STATE_LOADING=1;
net.READY_STATE_LOADED=2;


net.READY_STATE_INTERACTIVE=3;
net.READY_STATE_COMPLETE=4;
/*--- content loader object for cross-browser requests ---*/
net.ContentLoader=function(url,on_load,on_error,method,params,contentType){
  this.req=null;
  this.on_load=on_load;
  this.on_error=(on_error) ? on_error : this.defaultError;
  this.loadXMLDoc(url,method,params,contentType);
}
net.ContentLoader.prototype.loadXMLDoc=function(url,method,params,contentType){
  if (!method)
  {
 method="GET";
  }
  if (!contentType && method=="POST")
  {
 contentType='application/x-www-form-urlencoded';
  }
  if (window.XMLHttpRequest)
  {
 this.req=new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
   //add try catch;
   try {
      this.req = new ActiveXObject("Msxml2.XMLHTTP");
   }catch (e1){
     try {
      this.req = new ActiveXObject("Microsoft.XMLHTTP");    
      } catch (e2){
    }
   }
     //
 //this.req=new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (this.req)
  {
 try
 {
   var loader=this;
   this.req.onreadystatechange=function()
   {
  net.ContentLoader.onReadyState.call(loader);
   }
   this.req.open(method,url,true);
   if (contentType)
   {
    this.req.setRequestHeader('Content-Type', contentType);
   }
   this.req.send(params);
 }
 catch (err)
 {
   this.on_error.call(this);
 }
  }
}
net.ContentLoader.onReadyState=function(){
  var req=this.req;
  var ready=req.readyState;
  if (ready==net.READY_STATE_COMPLETE){
 var httpStatus=req.status;
 if (httpStatus==200 || httpStatus==0){
   this.on_load.call(this);
 }else{
   this.on_error.call(this);
 }
  }
}
net.ContentLoader.prototype.defaultError=function(){
  alert("error fetching data!"
 +"/n/nreadyState:"+this.req.readyState
 +"/nstatus: "+this.req.status
 +"/nheaders: "+this.req.getAllResponseHeaders());
}

AJAX与JSP结合的无刷新验证码实现示例 AJAX(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术。通过AJAX,Web页面可以进行异步数据交换,这意味着在不需要重新加载整个页面的情况下,可以更新网页的部分内容。AJAX的核心是XMLHttpRequest对象,它允许JavaScript向服务器提出请求,并处理服务器响应,而用户无需离开当前页面。工作原理可以细分为以下几个步骤:当用户在网页上进行某些操作时,如点击按钮,JavaScript会创建一个XMLHttpRequest对象。 阅读详情

相关推荐

士兰微SC7A20H三轴加速度计在智能穿戴设备中的运动检测实践

本文详细介绍了士兰微SC7A20H三轴加速度计在智能穿戴设备中的运动检测实践,包括其工作原理、硬件设计避坑指南、运动检测算法优化、低功耗设计及校准测试技巧。SC7A20H凭借±16g超宽量程和0.004g高精度,成为智能穿戴设备的运动感知核心,适用于计步、6D方向检测等场景,显著提升用户体验。

weixin_29168153的博客 740

AJAX+jsp无刷新【验证码】实例

AJAX+jsp无刷新验证码实例 【导读】本文通过实例,介绍在做验证码的时候为了给用户很好的体验,需要在原有验证方式基础之上增加一段js,通过xmlhttp来获取返回值,以此来验证是否有效。同时,本例还特别适合检验用户名是否有效。 1、我们在做验证码的时候往往由于要反作弊,验证有时故意加入多的干扰因素,这时验证码显示不很清楚,用户经常输入错误。这样不但要重新刷新页面,导致用户没有看清楚验证码而重填而不是修改,而且如果没有用session保存下用户输入的其它数据的话(如姓名),用户刚刚输入

rcy5211314的专栏 742

5分钟搞定PaddleOCR PP-OCRv5环境搭建:从安装到第一个识别Demo

本文提供了一份详细的PaddleOCR PP-OCRv5环境搭建与快速入门指南。通过清晰的步骤,指导读者在5分钟内完成从创建Python虚拟环境、安装PaddlePaddle框架和PaddleOCR库,到编写并运行第一个OCR识别Demo的全过程,帮助开发者快速体验最新的PP-OCRv5模型的文字识别能力。

sprite的博客 1267

java验证码局部刷新_jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验)

本文实例讲述了jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验)。分享给大家供大家参考,具体如下:welcome.jsppageEncoding="utf-8"%>修改个人信息function createXMLHttpRequest() {//表示当前浏览器不是ie,如ns,firefoxif(window.XMLHttpRequest) {xmlHttp = new X...

weixin_32520601的博客 206

从零构建:用Arduino和MCP2515模块搭建你的第一个CAN Bus网络

本文详细介绍了如何使用Arduino和MCP2515模块从零搭建CAN Bus网络,实现温湿度数据的传输与显示。涵盖硬件连接、软件配置、发送端与接收端代码实现,以及系统调试和进阶应用,帮助初学者快速掌握CAN总线通信技术。

d6e7f8的博客 833

Claude Code+Cursor+Claude 4三剑合璧!5步搞定Magentic-UI的OAuth2.0集成,开发效率飙升500%,新手秒变全栈工程师

本文详细介绍了如何利用Claude Code、Cursor和Claude 4三款AI工具高效集成Magentic-UI的OAuth2.0认证系统。通过5个步骤的实战演练,开发者可快速完成从环境搭建、项目分析、代码生成到前端集成的全过程,显著提升开发效率。文章还提供了JWT令牌管理、安全配置及常见问题解决方案。

weixin_29234509的博客 453

验证码刷新与提交示例(Jsp+Servlet+jquery+ajax)

验证码刷新与提交示例(Jsp+Servlet+jquery+ajax)环境 1、前端jsp 2、服务器tomcat 3、服务端servlet 4、使用tomcat发布项目的相对路径(你写代码的工程目录和发布到tomcat可以访问的目录是不一样的) verify.jsp<%@ page language="java" contentType="text/html; charset=utf-8" pag

iamzhuwh 2155

在Jetson Orin (Arm64)上从Ubuntu22.04回退至20.04的完整指南及ROS-noetic适配方案

本文提供了在Jetson Orin (Arm64)设备上将Ubuntu 22.04系统回退至20.04 LTS版本的完整操作指南。针对机器人开发中ROS-noetic对Ubuntu20.04的官方最佳支持,详细阐述了从关键备份、软件源与APT优先级配置、系统降级执行到后续问题排查的全过程,并附带了在Arm64架构上成功安装和验证ROS-noetic的适配方案,旨在为开发者构建稳定可靠的机器人开发环境。

flower的专栏 580

AJAX+jsp无刷新验证码实例

我们在做验证码的时候往往由于要反作弊,验证有时故意加入 多的干扰因素,这时验证码显示不很清楚,用户经常输入错误。这样不但要重新刷新页面,导致用户没有看清楚验证码而重填而不是修改,而且如果没有用 session保存下用户输入的其它数据的话(如姓名),用户刚刚输入的内容也不存在了,这样给用户造成不好的体验。 本例在原有验证方式基础之上增加一段js,通过xmlhttp来获取返

liam168的专栏 9364

SY6982C 7.4V锂电池1A充电模块原理图设计,已量产

在手持设备、便携工具与小型无人机等场景中,7.4V(2S)锂聚合物电池的应用愈发广泛。这类电池对充电系统的安全性、效率与兼容性提出了明确要求:需支持 USB 5V 输入、1A 安全充电,同时具备多重保护机制。本文将结合一款基于 SY6982C 的充电原理图,深入解析其电路设计与技术亮点。

不脱发的程序猿 362

【全局路径规划模块全覆盖算法】(三)代码实现:Boustrophedon Cellular Decomposition Path Planning用珊格地图生成每个cell的覆盖路径

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对Boustrophedon Cellular Decomposition Path Planning用珊格地图生成每个cell的覆盖路径做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 1833

java刷新页面触发事件_jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验)

本文实例讲述了jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验)。分享给大家供大家参考,具体如下:前台显示页面:welcome.jsppageEncoding="utf-8"%>修改个人信息function createXMLHttpRequest() {//表示当前浏览器不是ie,如ns,firefoxif(window.XMLHttpRequest) {xmlHttp ...

weixin_39973518的博客 232

AutoSAR系列讲解(入门篇)1.2-AutoSAR概述

这里主要说明了AutoSAR是个什么,还有其工具链

雪云飞星的博客 5万+

java ajax验证码_AJAX+jsp无刷新验证码实例

import="java.sql.*" errorPage="" pageEncoding="GBK"%>//set Chinese Char//Cody by JarryLi@gmail.com;//homepage:jiarry.126.comrequest.setCharacterEncoding("GBK");response.setCharacterEncoding("GBK");...

weixin_34873655的博客 166

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java验证码局部刷新_jsp+ajax+servlet实现局部刷新验证码的问题

在网上搜索了很多类似这样的例子。就是没一个满意的答案。我的servlet的代码是这样的:doGet方法里面response.setContentType("image/jpg;charset=UTF-8");//画一个随机生成的字符串I...在网上搜索了很多类似这样的例子。就是没一个满意的答案。我的servlet的代码是这样的:doGet方法里面response.setContentType("i...

weixin_39951018的博客 201

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

使用JSP、servlet和ajax实现无刷新获取验证码

实现效果如下图所示: 首先编写服务器端的代码,实现向客户端输出随机的验证码,具体代码如下: package com.wxq.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; imp

JavaQ 2787

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: java-图片加水印,文字水印
下一篇: 使用JSP生成彩色汉字验证码
iloveran
博客等级 码龄18年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值