???????????????????????????
???????????????????????案例实现效果 ???????????????????
用户在前端输入验证码,按键收起触发异步验证,验证验证码的对错
前端代码
checkcode.jsp
[java] view plain copy print?
- <%--
- User:cxspace
- Time:下午7:45
- --%>
- <html>
- <title>验证码检查</title>
- </head>
- <form>
- <th>验证码:</th>
- <td><imgsrc="check/checkImage.jsp"/></td>
- </table>
- functiontrim(str){
- str=str.replace(/^\s*/,"");//换掉左边空格
- returnstr;
- document.getElementById("checkcodeID").onkeyup=function(){
- varcheckcode=this.value;
- varajax=createAJAX();
- varurl="${pageContext.request.contextPath}/checkRequest?time="+newDate().getTime();
- ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
- if(ajax.readyState==4){
- vartip=ajax.responseText;
- img.src=tip;
- img.style.height="14px";
- td.innerHTML="";
- }
- }
- td.innerHTML="";
- }
- </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" maxlength="4"/></td> ??????????<td><img src="check/checkImage.jsp" /></td> ??????????<td ></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
[java] view plain copy print?
- //创建AJAX异步对象,即XMLHttpRequest
- varajax=null;
- ajax=newActiveXObject("microsoft.xmlhttp");
- try{
- }catch(e2){
- }
- returnajax;
- //创建AJAX异步对象,即XMLHttpRequestfunction createAJAX(){ ???var ajax = null; ???try{ ???????ajax = new ActiveXObject("microsoft.xmlhttp"); ???}catch(e1){ ???????try{ ???????????ajax = new XMLHttpRequest(); ???????}catch(e2){ ???????????alert("你的浏览器不支持ajax,请更换浏览器"); ???????} ???} ???return ajax;}
checkImage.jsp
[java] view plain copy print?
- <%--
- User:cxspace
- Time:下午5:39
- --%>
- <%@pagecontentType="image/jpeg"import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%>
- publicColorgetColor(){
- Randomrandom=newRandom();
- intr=random.nextInt(256);
- intg=random.nextInt(256);
- intb=random.nextInt(256);
- Colorcolor=newColor(r,g,b);
- returncolor;
- publicStringgetNum(){
- Stringstr="";
- Randomrandom=newRandom();
- for(inti=0;i<4;i++){
- }
- returnstr;
- %>
- <%
- response.setHeader("pragma","mo-cache");
- response.setDateHeader("expires",0);
- //设置图片大小和背景
- //创建画笔对象
- g.setColor(newColor(200,200,200));
- Randomrandom=newRandom();
- intx=random.nextInt(80);
- intx1=random.nextInt(x+10);
- g.setColor(getColor());
- }
- g.setFont(newFont("serif",Font.BOLD,16));
- StringcheckNum=getNum();
- //给字符串字符之间加空格
- for(inti=0;i<checkNum.length();i++){
- }
- out.clear();
- %>
<%-- ?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配置
[java] view plain copy print?
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEstrutsPUBLIC
- "http://struts.apache.org/dtds/struts-2.3.dtd">
- <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" ????????????? ?????????????method="check"> ?????</action> ??</package></struts>
checkcode.CheckcodeAction
[java] view plain copy print?
- packagecheckcode;
- importcom.opensymphony.xwork2.ActionContext;
- importorg.apache.struts2.ServletActionContext;
- importjavax.servlet.http.HttpServletResponse;
- *Createdbycxspaceon16-8-18.
- publicclassCheckcodeActionextendsActionSupport{
- privateStringcheckcode;
- publicvoidsetCheckcode(Stringcheckcode){
- }
- publicStringcheck()throwsException{
- Stringtip="images/MsgError.gif";
- StringcheckcodeServer=(String)ActionContext.getContext().getSession().get("checkNum");
- if(checkcode.equals(checkcodeServer)){
- }
- HttpServletResponseresponse=ServletActionContext.getResponse();
- response.setContentType("text/html;charset=UTF-8");
- pw.write(tip);
- pw.close();
- returnnull;
- }
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(二)-实现验证码异步验证功能
原文地址:https://www.cnblogs.com/jpfss/p/8446369.html
知识推荐
- JS中的Undefined和Null的区别
- ajax下post提交方式下载文件的处理(转)
- vue的jsonp百度下拉菜单
- HttpClient获取数据
- 网页性能优化,缓存优化、加载时优化、动画优化--摘抄
- Nginx+PHP基础配置
- php的连贯操作
- NFS(expirtfs命令,NFS客户端创建新文件所属组和所属主都为nobody)
- PHP的八种数据类型
- php中Cookies
- 【笔记】网易微专业-Web安全工程师-04.WEB安全实战-4.CSRF
- CSS两列布局
- 编写第一个HTML5文件
- Hibernate Validator简介
- 用js实现2048小游戏
- Apache(httpd)源码包安装
- Socket 与 WebSocket
- ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证