1.生成验证码

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="image/jpeg"  import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!public Color getColor(){Random random = new Random();int r = random.nextInt(256);int g = random.nextInt(256);int b = random.nextInt(256);return new Color(r,g,b);}public String getNum(){String str = "";Random random = new Random();for(int i=0;i<4;i++){str += random.nextInt(10);}return str;}
%>
<%response.setHeader("pragma", "mo-cache");response.setHeader("cache-control", "no-cache");response.setDateHeader("expires", 0);BufferedImage image = new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();g.setColor(new Color(200,200,200));g.fillRect(0,0,80,30);for (int i = 0; i < 30; i++) {Random random = new Random();int x = random.nextInt(80);int y = random.nextInt(30);int xl = random.nextInt(x+10);int yl = random.nextInt(y+10);g.setColor(getColor());g.drawLine(x, y, x + xl, y + yl);}g.setFont(new Font("serif", Font.BOLD,16));g.setColor(Color.BLACK);String checkNum = getNum();//"2525"
    StringBuffer sb = new StringBuffer();for(int i=0;i<checkNum.length();i++){sb.append(checkNum.charAt(i)+" ");//"2 5 2 5"
    }g.drawString(sb.toString(),15,20);session.setAttribute("CHECKNUM",checkNum);//2525
    ImageIO.write(image,"jpeg",response.getOutputStream());out.clear();out = pageContext.pushBody();
%>

2.添加验证码

<tr><th>验证码:</th><td><input size="2" type="text" name="checkcode" id="checkcodeID" maxlength="4"/></td><td id="checked" ><img id="imageId" src="${pageContext.request.contextPath }/jsp/01_image.jsp"/><td id="response"></td></tr>

3.创建AJAX

function createAJAX(){var ajax = null;try{ajax = new ActiveXObject("microsoft.xmlhttp");}catch(e1){try{ajax = new XMLHttpRequest();}catch(e2){alert("你的浏览器不支持ajax!");}}return ajax;}

4.异步方式进行验证

<!-- 去除空格 --><script type="text/javascript">//去掉二边的空格
        function trim(str){str = str.replace(/^\s*/,"");str = str.replace(/\s*$/,"");return str;     }</script>
<!-- 异步判断验证码输入是否正确 -->    <script type="text/javascript">document.getElementById("checkcodeID").onkeyup = function(){var checkcode = this.value;checkcode = trim(checkcode);if(checkcode.length == 4){//NO1)创建AJAXvar ajax = createAJAX();//NO2)设置提交方式var method = "POST";var url = "${pageContext.request.contextPath}/dictionary_checked?time="+new Date().getTime();ajax.open(method,url);//NO3)设置请求头ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");//NO4)设置参数var content = "checkcode=" + checkcode;ajax.send(content);//--------------------------------------------------------等待//NO5)判断是否返回成功并接收参数ajax.onreadystatechange = function(){if(ajax.readyState == 4){if(ajax.status == 200){//NO6)var tip = ajax.responseText;//NO7)var img = document.createElement("img");img.src = tip;img.style.width = "14px";img.style.height = "14px";var td = document.getElementById("response");td.innerHTML = "";td.appendChild(img);}}}}else{//清空图片var td = document.getElementById("response");td.innerHTML = "";}}</script>    

5.后台验证

/*** 验证*/public String checked() throws Exception {// 图片路径String tip = "images/error.gif";// 从服务器获取session中的验证码String checkcodeServer = (String) ActionContext.getContext().getSession().get("CHECKNUM");// 将客户端的验证码与服务端的验证码进行比较if (checkcode.equals(checkcodeServer)) {tip = "images/success.gif";}// 以IO流的方式将tip变量的值输出到AJAX异步对象中HttpServletResponse response = ServletActionContext.getResponse();response.setContentType("text/html;charset=UTF-8");PrintWriter pw = response.getWriter();pw.write(tip);pw.flush();pw.close();return null;}

6.提交验证

function submit2(){//获取js对象var td = document.getElementById("response");var img=td.firstChild;//获取路径信息var src2=img.src;//对输入的结果进行判定,选择是否提交if(src2==""){alert("验证码不能为空!");}else if(src2=="http://localhost:8080/BBS/jsp/images/success.gif"){var for2=document.forms[0];for2.submit();}else{alert("验证码输入错误!");}}</script>

7.总结:

(1)暂时无法实现点击更换验证码

(2)js方式过于繁琐,代码臃肿;

转载于:https://www.cnblogs.com/loong996/p/8551846.html

AJAX方式进行验证码的判断(JS方式)相关推荐

  1. Ajax和JSON-学习笔记01【原生JS方式实现Ajax】

    Java后端 学习路线 笔记汇总表[黑马程序员] Ajax和JSON-学习笔记01[原生JS方式实现Ajax] Ajax和JSON-学习笔记02[JQuery方式实现Ajax] Ajax和JSON-学 ...

  2. ajax加载vue数据,详解使用Vue.Js结合Jquery Ajax加载数据的两种方式

    整理文档,搜刮出一个使用vue.js结合jquery ajax加载数据的两种方式的代码,稍微整理精简一下做下分享. 废话不多说,直接上代码 html代码 demo {{message }} 测试jqu ...

  3. Ajax的异步同步原理以及js几种方式的实现

    Ajax的异步同步原理以及js几种方式的实现的个人详细解析 Ajax简介 Ajax的全称是:Asynchronous JavaScript And XML,指的是异步 JavaScript 及 XML ...

  4. ajax获取后台数据的几种方式及如何获取ajax内部的数据供外部使用

    文章目录 1 ajax获取后台数据的几种方式 1.1 原生js的ajax方式 1.1.1 get 1.1.2 post 1.2 jQuery封装的ajax方式 1.2.1 $.ajax 1.2.2 $ ...

  5. 利用modelarts和物体检测方式识别验证码

    近来有朋友让老山帮忙识别验证码.在github上查看了下,目前开源社区中主要流行以下几种验证码识别方式: tesseract-ocr模块: 这是HP实验室开发由Google 维护的开源 OCR引擎,内 ...

  6. 考前自学系列·计算机组成原理·查询方式/中断方式/DMA方式的适用范围及判断

    适用范围 查询方式:适合于工作不太繁忙的系统: 中断方式:适合于CPU任务比较忙的情况下,尤其适合实时控制和紧急事件的处理: DMA方式:适合于需要高速而又频繁地与存储器进行批量的数据交换的I/O设备 ...

  7. js方式调用php_javascript调用PHP和PHP调用javascript的方法

    javascript调用PHP和PHP调用javascript的方法 发布时间:2020-06-22 17:03:14 来源:亿速云 阅读:262 作者:Leah 这篇文章将为大家详细讲解有关java ...

  8. js方式调用php_举例说明JS调用PHP和PHP调用JS的方法

    举例说明JS调用PHP和PHP调用JS的方法 在学习任何一门编程语言,我们都会听到调用这个词,那么,在javascript中是如何调用php的呢?在php中也可以调用js吗?下面就让我们一起来看看吧. ...

  9. day 05总结(格式化输出的三种方式/基本运算符/if判断)

    一.格式化输出的三种方式 1.占位符(Python3.0) 占位符:%s(针对所有数据类型).%d(仅仅针对数字类型) 使用方法:引号内需要拼接的数据用占位符替代,引号外%加上数据所在的列表. nam ...

最新文章

  1. rm -fr后的恢复
  2. 北大邮箱收件服务器,北京大学微电子学研究院邮件系统
  3. AB1601的AD转换注意事项
  4. Axios的基本使用
  5. org.apache.flink.table.api.bridge.java.internal.BatchTableEnvironmentImpl找不到的问题
  6. IBASE archive pre-processing report RIBARCHV
  7. jpa jsf_完整Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分
  8. 什么是YARN?跟HBase和Spark比优势在哪?终于有人讲明白了
  9. mysql 字段存文件_使用数据库(mysql)字段保存文件
  10. linux远程备份视频教程,linux实现自动远程备份(scp+ssh)
  11. 前端之JQuery:JQuery属性操作
  12. 分享一个帮助你有效避免SQL Injection攻击的在线手册 - bbobby-tables.com
  13. OpenCV4 利用点线距离判断最小外接矩形的距离
  14. DBC文件解析,基于致远电子DBC_demo
  15. 主域名跳转到带www的域名方法,以及对seo有什么影响?
  16. ilove中文_Ilovechina的中文
  17. pvid与access的关系_交换机应用之端口模式(access、trunk和hybird)、是否标记(tag、untag)、端口缺省vlan(pvid、native id)...
  18. 西工大c语言程序设计,西工大18春《C语言程序设计》平时作业
  19. Java 轻量级框架Spring曝出0day漏洞
  20. 西门子V90 PN伺服_常用通信报文(速度+位置)的基本介绍

热门文章

  1. 如何把域名解析到网站空间IP上?
  2. 后会终无期,且行且珍惜
  3. Office 365系列之八:配置和体验Exchange和Lync
  4. zookeeper多种方式安装
  5. php中未定义的变量使用技巧
  6. 周鸿祎:不得不说的话
  7. [Web 开发] URL 的最大长度
  8. pat乙级相当于什么水平_雅思6分是什么水平?相当于英语几级
  9. 电脑护眼设置_解锁办公新技能 海信护眼平板Q5玩转工作无负担-科技频道
  10. 最初级且依赖于硬件的计算机语言是,计算机基础复习大纲(整理版).doc