(博客内容来自:jsp使用servlet实现验证码,以下内容只是不才对原博客的摘抄以便以后翻阅使用)

一.原理:

验证码作为一个图片,在页面中为“画”出来的,它是如何画出来的呢?

<生成图片>

{

  生成图片的类:

  1.BufferedImage图像数据缓冲区

  2.Graphics绘制图片

  3.color获取颜色

  4.Random获取随机数

  5.ImageIO输出图片

}

二.servlet后台:

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO; @WebServlet("/AptchaGenerate")
public class AptchaGenerate extends HttpServlet {
private static final long serialVersionUID = 1L; public AptchaGenerate() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BufferedImage bufferedImage = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);//创建图像缓冲区
Graphics g = bufferedImage.getGraphics(); //通过缓冲区创建一个画布
/*根据背景画了一个矩形框
*/
Color c = new Color(232, 232, 232); //创建颜色
g.setColor(c);//为画布创建背景颜色
g.fillRect(0, 0, 68, 22); //fillRect:填充指定的矩形
// X和Y用于指定矩形左上角也就是相对于原点的位置,width和height用于指定矩形的宽和高。 char[] charList = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//转化为字符型的数组
StringBuilder aptcha = new StringBuilder();
Random r = new Random();
for (int i = 0; i < 4; i++) {
int index = r.nextInt(charList.length); //产生随机数字,随机选取字母或数字
g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255))); //随机设置颜色
g.drawString(""+charList[index], i*15+5, 15); //画数字以及数字的位置
aptcha.append(charList[index]); //将选中的字母加入到验证码当中
}
ImageIO.write(bufferedImage, "JPG", response.getOutputStream()); //在客户端上画图
request.getSession().setAttribute("aptcha", aptcha.toString()); //将验证码保留在session中,便于后续的使用
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

三.前台:

1.HTML标签:

<div><h3>验证码:</h3></div>
<img alt="验证码" id="aptchaImage" src="${pageContext.request.contextPath}/AptchaGenerate"/>
<a href="javascript:void(0);" onclick="reloadAptcha()">看不清楚</a><br>
<input type="text" id="aptcha" autofocus="autofocus" autocomplete="off" maxlength="4" placeholder="请输入验证码">

2.javascript实现“看不清楚,下一张”:

function reloadAptcha(){
var time = new Date().getTime();
$("#aptchaImage").attr("src", "${pageContext.request.contextPath}/AptchaGenerate?d=" + time);
}

3.效果如下:

servlet实现验证码的更多相关文章

  1. jsp使用servlet实现验证码

    在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,小编将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的 ...

  2. servlet生成验证码

    1.因为朋友们都说现在很少用java自带的图形用户接口,所以小白的我就没去看awt和swing组件,因为要抓紧时间学习后面的,完了出去找工作,等以后再回来了解awt和swing:所以制作验证码的代码是 ...

  3. 转: 通过Servlet生成验证码图片

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)—— 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedIma ...

  4. 使用Servlet实现验证码

    没有验证码带来的问题 对特定用户不断登录破解密码. 对某个网站创建账户. 对某个网站提交垃圾数据. 对某个网站刷票.  通过验证码由用户肉眼识别其中的验证码信息,从而区分用户是人还是计算机. 定义: ...

  5. java web学习总结(九) -------------------通过Servlet生成验证码图片

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

  6. JavaWeb---总结(九)通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片  1 package gacl. ...

  7. javaweb学习总结(九)—— 通过Servlet生成验证码图片

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

  8. java web 学习九(通过servlet生成验证码图片)

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

  9. 通过Servlet生成验证码图片

    原文出自:http://www.cnblogs.com/xdp-gacl/p/3798190.html 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类, ...

随机推荐

  1. java 中的 i++ 和 ++i

    熟悉c/c++中的i++和++i,那么你知道下面的java代码效果是什么吗? 一 . 代码示例 /** * * @author elelule * */ public class TestPlusPl ...

  2. xgboost 特征选择,筛选特征的正要性

    import pandas as pd import xgboost as xgb import operator from matplotlib import pylab as plt def ce ...

  3. Borg Maze - poj 3026(BFS + Kruskal 算法)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9821   Accepted: 3283 Description The B ...

  4. erlang的md5加密

    二话不说,直接上代码 -module(md5). -compile(export_all). md5(S) -> Md5_bin = erlang:md5(S), Md5_list = bina ...

  5. PHP浮点数运算精度造成的,订单金额支付经常少1分的问题

    最近碰见一个奇怪的问题,商城通过微信支付的订单经常少一分钱,经过排查是PHP浮点运算精度问题造成的 由PHP浮点数运算精度造成的,鸟哥的Bolg有详细的说明.http://www.laruence.c ...

  6. PHPMailer 使用 中文乱码

    WordPress在用. You'll find plenty more to play with in the examples folder. 中文乱码问题: $mail->CharSet ...

  7. rebound是facebook的开源动画库

    网址:http://www.jcodecraeer.com/a/opensource/2015/0121/2338.html 介绍: rebound是facebook的开源动画库.可以认为这个动画库是 ...

  8. 那不是Bug,是新需求

    原文作者:Jeff Atwood 自从我干上软件开发这一行.而且使用了Bug跟踪系统.我们在每个项目里都会纠结一个主要的问题:你怎么能把Bug与功能需求区分开来? 当然,假设程序崩溃了,这毫无疑问是B ...

  9. Android hellocharts 柱形图详解

    近日需要做图表结构的项目,目前最火的就是hellocharts  和MPAndroidChart  相对来说hellocharts集成比较简单: 官网地址   https://github.com/l ...

  10. POJ1942

    Paths on a Grid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 24236   Accepted: 6006 ...