AJAX(二)-实现验证码异步验证功能
案例实现效果
用户在前端输入验证码,按键收起触发异步验证,验证验证码的对错


前端代码
checkcode.jsp
- <%--
- Created by IntelliJ IDEA.
- User: cxspace
- Date: 16-8-18
- Time: 下午7:45
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>验证码检查</title>
- <script type="text/javascript" src="js/ajax.js"></script>
- </head>
- <body>
- <form>
- <table border="0" align="center">
- <th>验证码:</th>
- <td><input size="3" type="text" name="checkcode" id="checkcodeID" maxlength="4"/></td>
- <td><img src="check/checkImage.jsp" /></td>
- <td id="res"></td>
- </table>
- </form>
- <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;
- var checkcode = trim(checkcode);
- if (checkcode.length == 4){
- var ajax = createAJAX();
- var method = "POST";
- var url = "${pageContext.request.contextPath}/checkRequest?time="+new Date().getTime();
- ajax.open(method,url);
- ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
- var content = "checkcode="+checkcode;
- ajax.send(content);
- ajax.onreadystatechange = function () {
- if(ajax.readyState == 4){
- if (ajax.status == 200){
- var tip = ajax.responseText;
- var img = document.createElement("img");
- img.src = tip;
- img.style.width = "14px";
- img.style.height = "14px";
- var td = document.getElementById("res");
- td.innerHTML="";
- td.appendChild(img)
- }
- }
- }
- }else {
- var td = document.getElementById("res");
- td.innerHTML = "";
- }
- }
- </script>
- </body>
- </html>
<%--
Created by IntelliJ IDEA.
User: cxspace
Date: 16-8-18
Time: 下午7:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>验证码检查</title>
<script type="text/javascript" src="js/ajax.js"></script>
</head>
<body>
<form>
<table border="0" align="center">
<th>验证码:</th>
<td><input size="3" type="text" name="checkcode" id="checkcodeID" maxlength="4"/></td>
<td><img src="check/checkImage.jsp" /></td>
<td id="res"></td>
</table>
</form> <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;
var checkcode = trim(checkcode); if (checkcode.length == 4){
var ajax = createAJAX();
var method = "POST";
var url = "${pageContext.request.contextPath}/checkRequest?time="+new Date().getTime();
ajax.open(method,url);
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
var content = "checkcode="+checkcode;
ajax.send(content);
ajax.onreadystatechange = function () {
if(ajax.readyState == 4){
if (ajax.status == 200){
var tip = ajax.responseText;
var img = document.createElement("img");
img.src = tip;
img.style.width = "14px";
img.style.height = "14px";
var td = document.getElementById("res");
td.innerHTML="";
td.appendChild(img)
}
}
}
}else { var td = document.getElementById("res");
td.innerHTML = "";
}
}
</script>
</body>
</html>
ajax.jsp
- //创建AJAX异步对象,即XMLHttpRequest
- function createAJAX(){
- var ajax = null;
- try{
- ajax = new ActiveXObject("microsoft.xmlhttp");
- }catch(e1){
- try{
- ajax = new XMLHttpRequest();
- }catch(e2){
- alert("你的浏览器不支持ajax,请更换浏览器");
- }
- }
- return ajax;
- }
//创建AJAX异步对象,即XMLHttpRequest
function createAJAX(){
var ajax = null;
try{
ajax = new ActiveXObject("microsoft.xmlhttp");
}catch(e1){
try{
ajax = new XMLHttpRequest();
}catch(e2){
alert("你的浏览器不支持ajax,请更换浏览器");
}
}
return ajax;
}
checkImage.jsp
- <%--
- Created by IntelliJ IDEA.
- User: cxspace
- Date: 16-8-18
- Time: 下午5:39
- To change this template use File | Settings | File Templates.
- --%>
- <%@ 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);
- Color color = new Color(r,g,b);
- return color;
- }
- //获取四位随机数连成的字符串
- 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 < 20 ; i++){
- Random random = new Random();
- int x = random.nextInt(80);
- int y = random.nextInt(30);
- int x1 = random.nextInt(x+10);
- int y1 = random.nextInt(y+10);
- //背景模糊线使用随机色
- g.setColor(getColor());
- g.drawLine(x,y,x+x1,y+y1);
- }
- g.setFont(new Font("serif",Font.BOLD,16));
- g.setColor(Color.black);
- String checkNum = getNum();
- //给字符串字符之间加空格
- StringBuffer sb = new StringBuffer();
- for (int i = 0 ; i < checkNum.length() ; i ++){
- sb.append(checkNum.charAt(i)+" ");
- }
- g.drawString(sb.toString(),10,20);
- session.setAttribute("checkNum",checkNum);
- ImageIO.write(image,"jpeg",response.getOutputStream());
- out.clear();
- out = pageContext.pushBody();
- %>
<%--
Created by IntelliJ IDEA.
User: cxspace
Date: 16-8-18
Time: 下午5:39
To change this template use File | Settings | File Templates.
--%>
<%@ 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); Color color = new Color(r,g,b); return color;
} //获取四位随机数连成的字符串
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 < 20 ; i++){
Random random = new Random(); int x = random.nextInt(80);
int y = random.nextInt(30);
int x1 = random.nextInt(x+10);
int y1 = random.nextInt(y+10); //背景模糊线使用随机色
g.setColor(getColor());
g.drawLine(x,y,x+x1,y+y1);
} g.setFont(new Font("serif",Font.BOLD,16));
g.setColor(Color.black);
String checkNum = getNum(); //给字符串字符之间加空格
StringBuffer sb = new StringBuffer();
for (int i = 0 ; i < checkNum.length() ; i ++){
sb.append(checkNum.charAt(i)+" ");
}
g.drawString(sb.toString(),10,20); session.setAttribute("checkNum",checkNum); ImageIO.write(image,"jpeg",response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%>
后端代码
action配置
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
- "http://struts.apache.org/dtds/struts-2.3.dtd">
- <struts>
- <package name="myPackage" namespace="/" extends="struts-default">
- <action name="checkRequest"
- class="checkcode.CheckcodeAction"
- method="check">
- </action>
- </package>
- </struts>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="myPackage" namespace="/" extends="struts-default"><action name="checkRequest"
class="checkcode.CheckcodeAction"
method="check"> </action>
</package>
</struts>
checkcode.CheckcodeAction
- package checkcode;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- import org.apache.struts2.ServletActionContext;
- import javax.servlet.http.HttpServletResponse;
- import java.io.PrintWriter;
- /**
- * Created by cxspace on 16-8-18.
- */
- public class CheckcodeAction extends ActionSupport{
- private String checkcode;
- public void setCheckcode(String checkcode) {
- this.checkcode = checkcode;
- }
- public String check() throws Exception {
- String tip = "images/MsgError.gif";
- String checkcodeServer = (String) ActionContext.getContext().getSession().get("checkNum");
- if (checkcode.equals(checkcodeServer)){
- tip="images/MsgSent.gif";
- }
- HttpServletResponse response = ServletActionContext.getResponse();
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter pw = response.getWriter();
- pw.write(tip);
- pw.flush();
- pw.close();
- return null;
- }
- }
package checkcode; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext; import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter; /**
- Created by cxspace on 16-8-18.
*/
public class CheckcodeAction extends ActionSupport{ private String checkcode; public void setCheckcode(String checkcode) {
this.checkcode = checkcode;
} public String check() throws Exception {String tip = "images/MsgError.gif"; String checkcodeServer = (String) ActionContext.getContext().getSession().get("checkNum"); if (checkcode.equals(checkcodeServer)){
tip="images/MsgSent.gif";
} HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.write(tip);
pw.flush();
pw.close(); return null;
}
}
AJAX(二)-实现验证码异步验证功能的更多相关文章
- MVC验证09-使用MVC的Ajax.BeginForm方法实现异步验证
原文:MVC验证09-使用MVC的Ajax.BeginForm方法实现异步验证 MVC中,关于往后台提交的方法有: 1.Html.BeginForm():同步 2.Ajax.BeginForm():异 ...
- Thinkphp验证码异步验证第二次及以后验证,验证错误----待解决
今天进行差错时遇到的问题.别人的回答----链接(http://www.thinkphp.cn/topic/28968.html) 3.2.3版本里的check方法会在第一次验证正确后清除SESSIO ...
- formValidator输入验证、异步验证实例 + licenseImage验证码插件实例应用
实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能清单: 1.springmvc控制器处理get请求(/member/login.html),进行静态页 ...
- MVC验证11-对复杂类型使用jQuery异步验证
原文:MVC验证11-对复杂类型使用jQuery异步验证 本篇体验使用"jQuery结合Html.BeginForm()"对复杂类型属性进行异步验证.与本篇相关的"兄弟篇 ...
- MVC验证10-到底用哪种方式实现客户端服务端双重异步验证
原文:MVC验证10-到底用哪种方式实现客户端服务端双重异步验证 本篇将通过一个案例来体验使用MVC的Ajax.BeginForm或jQuery来实现异步提交,并在客户端和服务端双双获得验证.希望能梳 ...
- 利用js制作异步验证ajax方法()
如何利用js写ajax异步验证.代码如下: window.onload = function(){ var name = document.getElementById('register-name- ...
- Ajax实现验证码异步校验
验证码异步校验可以防止表单提交后因验证码不正确导致已填的其它项都清空. 整个过程图如下 验证码输入框出代码 <div class="form-group"> <l ...
- 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)
一年前,从不知道Ajax是什么,伴随着不断的积累,到如今常常使用,逐渐有了深入的认识. 今天,假设想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在具体讨论Aj ...
- epic游戏平台如何启用认证器应用程序/二次验证码/谷歌身份验证器?
1.登陆epic游戏平台,找到二次验证绑定界面 登陆https://www.epicgames.com/store/zh-CN/, 点右上角用户头像-[账户]. 之后点-[密码与安全] 在[双重验证] ...
随机推荐
- 转载https://www.luogu.org/problemnew/solution/P1665,http://bailian.openjudge.cn/practice/2002/的新解法
不知道为什么O(n^4)O(n4)的玄学方法能过,正解显然是O(n^2)O(n2)的,枚举对角线,然后算出另外两点判断存不存在. 关键就在怎么通过对角线算出另外两点的坐标. 先贴公式. int mid ...
- putty开源的ssh软件工具
# 登录远程服务器需要ip和端口即可:还是开源工具用起来无忧无虑.无拘无束,这种感觉实在太舒服了,比起xshell开始免费.后来收费好太多太多,不用担心哪天过期了,想干嘛就干嘛. 软件下载地址:htt ...
- What is python .. (“dot dot”) notation syntax?
What you have is a float literal without the trailing zero, which you then access the __truediv__met ...
- AdaBoost笔记之代码
最近要做二分类问题,先Mark一下知识点和代码,参考:Opencv2.4.9源码分析——Boosting 以下内容全部转自此文 一 原理 二 opencv源码 1.先看构建Boosting的参数: ...
- Flask中cookie和session设置与csrf原理攻防
Flask之操作cookie app.py from flask import Flask, request, Response app = Flask(__name__) @app.route('/ ...
- Leetcode103. Binary Tree Zigzag Level Order Traversal二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / ...
- 在vue项目中正确的引入jquery
最近学习vue,习惯性的通过<script>标签引入jquery,写完后报错才想起来,这种方式在vue是不适用的. 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jqu ...
- beanstalkd 消息队列发邮件
放入消息 /** * 获取beanstalk实例 * * @staticvar resource|bool $beanstalk * @return resource */ function get_ ...
- H5C3--transform实现任何元素居中对齐
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- shell总结:读取文件、参数、if、分割字符串、数组长度、空文件、变量赋值、多进程、按行切割文件、查看线程
Reference: http://saiyaren.iteye.com/blog/1943207 1. Shell 读取文件和写文件 for line in $(<top30000. ...