AJAX应用【股票案例、验证码校验】(五)

简介: 笔记

验证码校验


对于验证码检查我们并不会陌生,我们在学习Session的时候已经使用过了验证码检查了。详细可参考:http://blog.csdn.net/hon_3y/article/details/54799494#t11

我们当时是同步检查验证码是否正确的,其实没有必要。因为就验证一个输入框的数据,没必要使用同步的方式验证【使用异步对用户体验更加友好】

35.jpg


分析


当用户输入完4位数字的时候,就去服务器端验证是否需要相同,如果相同,那么返回一个打钩的图片。如果不同,那么就返回一个打叉的图片


前台分析


  • 绑定键盘输入事件
  • 当输入数达到4的时候,就与服务器交互
  • 得到服务器带过来的图片,使用DOM添加到对应的位置


后台分析


  • 得到前台带过来的值
  • 判断该值与Session保存的是否相同
  • 根据判断值返回对应的图片

编写JSP


值得注意的是:要获取td定义的id,外边一定要套上table标签。。。我在刚开始写的时候,是没有table标签的。然后死活得不到td的标签....很烦...

<%--

 Created by IntelliJ IDEA.

 User: ozc

 Date: 2017/5/17

 Time: 20:52

 To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

   <title>验证码校验</title>

   <scripttype="text/javascript"src="js/ajax.js"></script>

</head>

<body>



<%--###################展示页面#############################--%>


<table>

   <tr>

       <td>验证码:</td>

       <td><inputtype="text"id="checkCode"name="checkCode"></td>

       <td><imgsrc="01_image.jsp"/></td>

       <tdid="result"></td>

   </tr>

</table>



<%--###################去除空格方法#############################--%>

<scripttype="text/javascript">


   functiontrim(str){


       //去除左边的空格

       str.replace("/^\s*/","");


       //去除右边的空格

       str.replace("/\s*$/","");

       returnstr;


   }

</script>



<%--###################绑定键盘事件#############################--%>


<scripttype="text/javascript">



   document.getElementById("checkCode").onkeyup=function(){


       //得到输入框的内容,把的前后空格都去除

       varkeyValue=this.value;

       keyValue=trim(keyValue);


       /*******************ajax代码*******************************/

       if(keyValue.length==4){



           varajax=createAJAX();

           varmethod="post";

           varurl="${pageContext.request.contextPath}/CheckCodeServlet?time="+newDate().getTime();

           ajax.open(method,url);

           ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");

           ajax.send("keyValue="+keyValue);



           /*******************ajax回调函数*******************************/

           ajax.onreadystatechange=function(){

               if(ajax.readyState==4){

                   if(ajax.status==200){


                       //得到服务器带过来的数据

                       vartip=ajax.responseText;


                       /*******************使用DOM把数据添加到页面上*******************************/

                       varimg=document.createElement("img");

                       img.src=tip;

                       img.style.width="14px";

                       img.style.height="14px";

                       vartd=document.getElementById("result");

                       td.innerHTML="";

                       td.appendChild(img);

                   }

               }

           };



       }else{

           //清空图片

           vartd=document.getElementById("result");

           td.innerHTML="";

       }



   };



</script>



</body>

</html>

  • 处理请求的Servlet

importjavax.servlet.ServletException;

importjavax.servlet.annotation.WebServlet;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjava.io.IOException;

importjava.io.PrintWriter;


/**

* Created by ozc on 2017/5/17.

*/

@WebServlet(name="CheckCodeServlet",urlPatterns="/CheckCodeServlet")

publicclassCheckCodeServletextendsHttpServlet{

   protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{


       //得到带过来的数据

       StringkeyValue=request.getParameter("keyValue");

       //得到Session中的数据

       StringcheckCodeInSession=(String)request.getSession().getAttribute("CHECKNUM");

       response.setContentType("text/html;charset=UTF-8");


       Stringsrc="images/MsgError.gif";


       //判断俩数据是否相同

       if(keyValue.equals(checkCodeInSession)){

           src="images/MsgSent.gif";

       }

       PrintWriterwriter=response.getWriter();

       writer.write(src);


       writer.flush();

       writer.close();



   }


   protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{


       this.doPost(request,response);


   }

}


测试

43.gif


总结

  • 使用AJAX验证校验码主要是监听键盘的响应事件
  • 要获取td标签的数据,外边一定要套有table标签!【别偷懒不写table标签】
  • 当输入框的数值数为4的时候就与服务器进行交互,服务器返回一张图片。
  • 可以用自定义的trim()把数据的前后空格去掉,通过正则表达式来去除空格。
  • 当输入框的数值数不为4的时候就把图片的内容清空



目录
相关文章
|
7月前
|
前端开发 JavaScript Java
使用Ajax进行异步交互:提升Java Web应用的用户体验
【4月更文挑战第3天】Ajax技术在Web开发中提升UX,通过与服务器异步交互实现页面局部更新,无需完整刷新。核心组件包括XMLHttpRequest、JavaScript、HTML/CSS及服务器端脚本。在Java Web应用中,可使用原生JavaScript或框架如jQuery、AngularJS实现Ajax请求。Ajax减少页面刷新,实现实时数据更新,即时表单验证和动态UI,显著改善用户体验,是现代Web开发不可或缺的一部分。
97 0
|
2月前
|
数据采集 自然语言处理 API
Python反爬案例——验证码的识别
Python反爬案例——验证码的识别
47 2
|
2月前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
259 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
3月前
|
前端开发
React技术栈-react使用的Ajax请求库实战案例
这篇文章介绍了在React应用中使用Axios和Fetch库进行Ajax请求的实战案例,展示了如何通过这些库发送GET和POST请求,并处理响应和错误。
61 10
React技术栈-react使用的Ajax请求库实战案例
|
3月前
|
前端开发
React技术栈-react使用的Ajax请求库用户搜索案例
这篇文章展示了一个React技术栈中使用Ajax请求库(如axios)进行用户搜索的实战案例,包括React组件的结构、状态管理以及如何通过Ajax请求获取并展示GitHub用户数据。
37 7
React技术栈-react使用的Ajax请求库用户搜索案例
|
2月前
|
JSON JavaScript 前端开发
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
18 0
|
4月前
|
前端开发 Java UED
瞬间变身高手!JSF 与 Ajax 强强联手,打造极致用户体验的富客户端应用,让你的应用焕然一新!
【8月更文挑战第31天】JavaServer Faces (JSF) 是 Java EE 标准的一部分,常用于构建企业级 Web 应用。传统 JSF 应用采用全页面刷新方式,可能影响用户体验。通过集成 Ajax 技术,可以显著提升应用的响应速度和交互性。本文详细介绍如何在 JSF 应用中使用 Ajax 构建富客户端应用,并通过具体示例展示 Ajax 在 JSF 中的应用。首先,确保安装 JDK 和支持 Java EE 的应用服务器(如 Apache Tomcat 或 WildFly)。
47 0
|
5月前
|
XML 前端开发 API
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
【7月更文挑战第13天】构建现代Web应用的关键在于提供无缝用户体验,这涉及AJAX和Fetch API的异步数据交换以及Python(如Flask)的后端支持。Fetch API以其基于Promise的简洁接口,改进了AJAX的复杂性。例如,一个Flask应用可提供用户数据,前端利用Fetch API在不刷新页面的情况下显示信息。这种结合提升了效率,减少了服务器负载,是现代Web开发的趋势。随着技术发展,预期将有更多工具优化这一过程。
72 3
|
6月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
118 5
|
6月前
|
前端开发 Python
Django框架中Ajax GET与POST请求的实战应用
Django框架中Ajax GET与POST请求的实战应用