图片验证码代码怎么解析,Java实现验证码制作
刷新前
刷新后
相关代码
index.jsp
$Title$
看起来不太好。 请点击
功能变更代码
document.getelementbyid('code ' ).src='code.jsp?=' new Date ().getTime );
}
code.jsp
//*
* 1、清空浏览器缓存。
*由于浏览器存储了网站的资源文件和图像,所以浏览器中加载的图像被存储,存储的文件
*与服务器的交互如果不为空,则可能会出现验证更新后无效的问题。
*/
response.setheader('pragma ',' no-cache ' );
response.setheader (' cache-control ',' no-cache ' );
response.setheader('expires ','0' );
//2、调用生成制作的认证码的工具,保存在session中
string code=captcahcode.drawimage (response;
sssion.setattribute('code ',code );
//3、getOutputStream ()解决hasalreadybeencalledforthisresponse异常
out.clear (;
out=pageContext.pushBody (;
%
CaptcahCode.java
package com.alan.code;
import javax.imageio.ImageIO;
import javax.servlet.http.http无servlet轮询;
import java.awt.*;
import Java.awt.font.fontrender context;
import Java.awt.geom.rectangle 2d;
import Java.awt.image.buffered image;
import java.io.IOException;
import java.util.Random;
//*
*验证码工具类
*/
public class CaptcahCode {
//*
*如何生成认证码
* @param response
* @return
*/
publicstaticstringdrawimage (httpservletresponseresponse ) {
//1,使用stringbuilder类处理字符串。 不用字符串。 因为赋值后就不能更改了。
stringbuilder builder=new stringbuilder (;
//2,产生随机数,长度为4
for(intI=0; i 4; I ) {
builder.append(randomchar () );
}
String code=builder.toString (;
//3、定义图像的宽度和高度,并使用BufferedImage对象。
输入宽度=120;
int height=25;
bufferedimagebi=newbufferedimage (width,height,BufferedImage.TYPE_3BYTE_BGR );
//4、获取Graphics2D绘图对象,开始绘制二维码
Graphics2D g=bi.createGraphics (;
//5,定义字符的字体和大小
font font=new font (' Microsoft Yahoo ',Font.PLAIN,20 );
//6,定义字体颜色
color color=new color (0,0,0 );
//设置字体
g.setfont(font );
//设置颜色
g.setcolor(color );
//设定背景
g.setbackground(newcolor ) 226、226和240 );
//开始绘制对象
g.clear rect (0,0,width,height );
//绘制形状,获取矩形对象
fontrendercontextcontext=g.getfontrendercontext (;
rectangle 2d bounds=font.getstring bounds (code,context );
//计算文件的坐标和间隔
doublex=(width-bounds.getwidth ) )/2;
doubley=(height-bounds.getheight ) )/2;
double ascent=bounds.getY (;
double baseY=y - ascent;
g.drawstring(code,(int ) x,(int ) baseY );
//结束描绘
g.dispose (;
try {
imageio.write(bi,' jpg ',response.getOutputStream ) );
//更新响应流
response.flushBuffer (;
}catch(ioexceptione ) {
e .打印堆栈跟踪(;
}
返回代码;
}
//*
*此方法用于用户生成随机的字符和数字
* @return
*/
私有状态字符随机(
//1、定义验证所需的字母和数字
stringstr=' zxcvbnmasdfghjklqwertyuiop 0123456789 ';
//2、定义随机对象
Random random=new Random (;
//3,返回随机字符
return str.charat (random.nextint (str.length () );
}
}