1.页面代码

<html>
<head>
<title>Title</title>
<script type="text/javascript" src="/resources/js/jquery-3.3.1.js" ></script>
<script type="text/javascript" >
function reloadCheckImg()
{
$("img").attr("src", "./img.jsp?t="+(new Date().getTime())); //<img src="...">
}
$(document).ready(function(){
$("#checkcodeId").blur(function(){
var $checkcode = $("#checkcodeId").val();
//校验 :文本框中输入的值 发送到服务端。
//服务端: 获取文本框输入的值 ,和真实验证码图片中的值对比 ,并返回验证结果
$.post(
"/CheckCodeServlet",//服务端地址
"checkcode="+$checkcode ,
function(result){//图片地址(imgs/right.jpg imgs/wrong.jpg)
//result: imgs/right.jpg
var resultHtml = $("<img src='"+result+"' height='15' width='15px' />") ;
$("#tip").html(resultHtml);
}
);
});
});
</script>
</head>
<body>
验证码:
<input type="text" name="checkcode" id="checkcodeId" size="4" />
<!-- 验证码--> <a href="javascript:reloadCheckImg();"> <img src="./img.jsp"/></a> <span id="tip"> </span>
</body>
</html>

2.绘制验证码

<%@ page import="java.awt.*" %>
<%@ page import="java.util.Random" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="javax.imageio.ImageIO" %>
<%@ page contentType="image/jpeg;charset=UTF-8" language="java" %> <%!
//随机产生颜色值
public Color getColor(){
Random ran = new Random() ;//Math.random() 0-1
int r = ran.nextInt(256) ;
int g = ran.nextInt(256) ;
int b = ran.nextInt(256) ;
return new Color(r,g,b) ;//red green blue 0-255
} //产生验证码值
public String getNum() {
// 0-8999 1000-9999
int ran = (int)( Math.random()*9000) +1000 ;
return String.valueOf(ran) ;
}
%> <% //禁止缓存,防止验证码过期
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Expires","0"); //绘制验证码
BufferedImage image = new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB) ;
//画笔
Graphics graphics = image.getGraphics();
graphics.fillRect(0,0,80,30);
//绘制干扰线条
for(int i=0;i<60;i++)
{
Random ran = new Random() ;
int xBegin = ran.nextInt(80) ;//
int yBegin = ran.nextInt(30) ; int xEnd = ran.nextInt(xBegin +10 ) ;
int yEnd = ran.nextInt(yBegin + 10) ; graphics.setColor( getColor());
//绘制线条
graphics.drawLine(xBegin,yBegin,xEnd,yEnd);
} graphics.setFont(new Font("seif",Font.BOLD,20));
//绘制验证码
graphics.setColor(Color.BLACK);
String checkCode = getNum() ; //2 1 3 4
StringBuffer sb = new StringBuffer() ;
for(int i=0;i<checkCode.length();i++){
sb.append(checkCode.charAt(i)+" " ) ;//验证码的每一位数字
} graphics.drawString( sb.toString(), 15,20 );//绘制验证码 //将验证码真实值 保存在session中,供使用时比较真实性
session.setAttribute("CKECKCODE" ,checkCode ); //真实的产生图片
ImageIO.write(image,"jpeg", response.getOutputStream()) ; //关闭
out.clear();
out = pageContext.pushBody() ; //<input type="image" src="xxx" /> %>

3.service调用

        String resultTip = null;
//获取用户输入验证码
String checkcodeClient = request.getParameter("checkcode");
//真实的验证码值
String checkcodeServer = (String) request.getSession().getAttribute("CKECKCODE");
if(checkcodeServer.equals(checkcodeClient)) {
resultTip = "/resources/image/right.jpg";
}else {
resultTip = "/resources/image/wrong.jpg";
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write(resultTip);
writer.close();
writer.flush();

JavaWeb中登录验证码生成的更多相关文章

  1. python登录验证码生成及自动化测试规避

    在用django写论坛的时候,需要有登录及注册功能. 故就登录界面后端需要生成随机验证码并传值给前端的代码进行编写如下. 验证码生成png需要调用到python的图形库 生成注册码img import ...

  2. Javaweb中利用kaptcha生成验证码

    引入kaptcha-2.3-jdk15.jar包 在web.xml中进行配置 <servlet> <servlet-name>Kaptcha</servlet-name& ...

  3. ASP.NET登录验证码解决方案

    目录 #验证码效果图 #代码 0.html代码 1.Handler中调用验证码生成类 2.验证码图片绘制生成类 3.高斯模糊算法类 #注意 #参考 在web项目中,为了防止登录被暴力破解,需要在登录的 ...

  4. JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html    另:算术验证码生成的JSP.Servlet实现均已移植github:https:/ ...

  5. Java中SSM+Shiro系统登录验证码的实现方法

    1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...

  6. Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

    日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...

  7. java web中验证码生成的demo

    首先创建一个CaptailCode类 package com.xiaoqiang.code; import java.awt.*; import java.awt.font.FontRenderCon ...

  8. javaweb项目中表单生成的验证码以及校验

    首先先来看一下项目的结构吧,有两个servlet,一个是进行验证码的生成以及存储的,一个是进行校验的,还有一个jsp页面是用来实现form表单的书写和展示: 我们只需要看这三个就行了,其他的自动忽略: ...

  9. javaweb(九)—— 通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

随机推荐

  1. day10-time模块

    import time print(time.time()) #时间戳1553070877.0166008 print(time.strftime('%Y-%m-%d %H %M %S')) #201 ...

  2. 关于k8s资源类型和缩写

    资源类型 缩写 描述 clusters     componentstatuses cs   configmaps cm   daemonsets ds   deployments deploy   ...

  3. Java集合源码剖析——ArrayList源码剖析

    ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线 ...

  4. 牛客-Forsaken的数列(Treap)

    题目传送门 sol:第一次看题还真信了是用线段树来做,但是没什么想法,看了题解发现是我不会的Treap,然后花了几天时间学习了一下并补掉题目 无旋Treap #include <bits/std ...

  5. Zabbix 监控sqlserver

    转:Zabbix 监控sqlserver 一:Zabbix监控sqlserver 方法一: 1.思路整理 1.在zabbix server上安装Freetds.unixODBC.unixODBC-de ...

  6. 吴裕雄--天生自然python学习笔记:Python3 JSON 数据解析

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. Python3 中可以使用 json 模块来对 JSON 数据进 ...

  7. js - 常用的继承

    零.序言 参考资料:JavaScript常用八种继承方案: 注:1.此篇笔记是站在上述资料的肩膀上的一篇小结: 2.阅读之前建议温习一下 js 中的 prototype 和 constructor:( ...

  8. Mac使用sublime text3的快捷键

    符号说明⌘:command⌃:control⌥:option⇧:shift↩:enter⌫:delete 打开/关闭/前往⌘⇧N 打开一个新的sublime窗口⌘N 新建文件⌘⇧W 关闭sublime ...

  9. 解决Eclipse和MyEclipsejava.lang.OutOfMemoryError Java heap space的错误

    Eclipse和MyEclipse出现错误:java.lang.OutOfMemoryError: Java heap space的错误,很熟悉的错误信息,可咋就想不起来在哪里设JVM的参数啊.请看下 ...

  10. <JZOJ5904>刺客信条

    然鹅考场上打错某变量名导致30都没有 调了很久因为 没转换double 死亡 #include<cstdio> #include<algorithm> #include< ...