servlet实现验证码
(博客内容来自: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实现验证码的更多相关文章
- jsp使用servlet实现验证码
在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,小编将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的 ...
- servlet生成验证码
1.因为朋友们都说现在很少用java自带的图形用户接口,所以小白的我就没去看awt和swing组件,因为要抓紧时间学习后面的,完了出去找工作,等以后再回来了解awt和swing:所以制作验证码的代码是 ...
- 转: 通过Servlet生成验证码图片
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)—— 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedIma ...
- 使用Servlet实现验证码
没有验证码带来的问题 对特定用户不断登录破解密码. 对某个网站创建账户. 对某个网站提交垃圾数据. 对某个网站刷票. 通过验证码由用户肉眼识别其中的验证码信息,从而区分用户是人还是计算机. 定义: ...
- java web学习总结(九) -------------------通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- JavaWeb---总结(九)通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl. ...
- javaweb学习总结(九)—— 通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- java web 学习九(通过servlet生成验证码图片)
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- 通过Servlet生成验证码图片
原文出自:http://www.cnblogs.com/xdp-gacl/p/3798190.html 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类, ...
随机推荐
- HDU 1014 Uniform Generator 题解
找到规律之后本题就是水题了.只是找规律也不太easy的.证明这个规律成立更加不easy. 本题就是求step和mod假设GCD(最大公约数位1)那么就是Good Choice,否则为Bad Choic ...
- asp.net repeater Container.ItemIndex
<asp:Repeater ID="myRepeater" runat="server"> <HeaderTemplate> <t ...
- Flask--上下文源码流程
- json字符串传值到后台出现乱码的问题的解决方法
1.原因:前台的编码是ISO-8859-1,后台的编码是UTF-8,所以会冲突 2.解决方法:先用ISO-8859-1解码成字节数组,再转成UTF-8编码格式 String strw = new St ...
- xfs 文件系统损坏修复 fscheck
- Windows找出占用端口的进程
第一步:找出监听指定端口的进程号: C:\> netstat -ao | findstr 443 TCP 0.0.0.0:443 Sean-NotePC:0 ...
- 安装Hadoop 1.1.2 (二 安装配置SSH)
1 查找SSH yum search ssh 2 如果没有安装, yum install openssh.x86_64 4 直接运行 ssh-keygen -t dsa -P '' -f /roo ...
- 浅谈<持续集成、持续交付、持续部署>(二)
集成是指软件个人研发的部分向软件整体部分交付,以便尽早发现个人开发部分的问题:部署是代码尽快向可运行的开发/测试节交付,以便尽早测试:交付是指研发尽快向客户交付,以便尽早发现生产环境中存在的问题.如果 ...
- 【BZOJ1345】[Baltic2007]序列问题Sequence 贪心+单调栈
[BZOJ1345][Baltic2007]序列问题Sequence Description 对于一个给定的序列a1, …, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和a ...
- windy数(简单数位DP)
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6306 Solved: 2810[Submit][Sta ...