java jsp中图片验证码_jsp中生成图片验证码

这篇博客介绍了一个使用Java实现的生成随机验证码图片的jsp页面代码,包括颜色生成函数、绘制干扰线和随机字符等步骤。同时,提供了登录页面的验证码输入验证和验证页面的代码。博客还提到,在某些旧版本的Tomcat服务器上可能会遇到`java.lang.IllegalStateException`的问题,解决方案是升级Tomcat版本。最后,博主分享了如何修改代码以生成数字字母混合的验证码。
摘要由CSDN通过智能技术生成

image.jsp-------------------生成随即验证码图片的jsp页面

代码如下:

java.awt.image.*,java.util.*,javax.imageio.*" %>

Color getRandColor(int fc,int bc)

{

Random random = new Random();

if(fc>255) fc=255;

if(bc>255) bc=255;

int r=fc+random.nextInt(bc-fc);

int g=fc+random.nextInt(bc-fc);

int b=fc+random.nextInt(bc-fc);

return new Color(r,g,b);

}

%>

out.clear();//这句针对resin服务器,如果是tomacat可以不要这句

response.setHeader("Pragma","No-cache");

response.setHeader("Cache-Control","no-cache");

response.setDateHeader("Expires", 0);

int width=60, height=20;

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();

Random random = new Random();

g.setColor(getRandColor(200,250));

g.fillRect(0, 0, width, height);

g.setFont(new Font("Times New Roman",Font.PLAIN,18));

g.setColor(getRandColor(160,200));

for (int i=0;i<155;i++)

{

int x = random.nextInt(width);

int y = random.nextInt(height);

int xl = random.nextInt(12);

int yl = random.nextInt(12);

g.drawLine(x,y,x+xl,y+yl);

}

String sRand="";

for (int i=0;i<4;i++){

String rand=String.valueOf(random.nextInt(10));

sRand+=rand;

g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));

g.drawString(rand,13*i+6,16);

}

// 将认证码存入SESSION

session.setAttribute("rand",sRand);

g.dispose();

ImageIO.write(image, "JPEG", response.getOutputStream());

%>

login.jsp--------------------登录页面,在这里我是提供输入验证码然后提交进行验证

代码如下:

用户登录

function loadimage(){

document.getElementById("randImage").src = "image.jsp?"+Math.random();

}

code...
看不清点我

validate.jsp-------------用来验证输入的验证码是否正确

代码如下:

String rand = (String)session.getAttribute("rand");

String input = request.getParameter("rand");

if(rand.equals(input)){

out.print("");

} else{

out.print("");

}

%>

上面生成的是纯数字的验证码,我们对其进行一下修改就可以生成数字字母混合的验证码了。

修改部分的代码如下:

......

......

......

for (int i=0;i<155;i++)

{

......

......

}

//-----------------以下是要添加的代码--------------

char c[] = new char[62];

for (int i = 97, j = 0; i < 123; i++, j++) {

c[j] = (char) i;

}

for (int o = 65, p = 26; o < 91; o++, p++) {

c[p] = (char) o;

}

for (int m = 48, n = 52; m < 58; m++, n++) {

c[n] = (char) m;

}

String sRand="";

for (int i=0;i<4;i++){

int x = random.nextInt(62);

String rand=String.valueOf(c[x]);

sRand+=rand;

//---------------------------------------------

%>

据有部分朋友反应,在测试过程中出现java.lang.IllegalStateException: getOutputStream() has already been called for this response的异常,经过测试发现,使用tomcat5一下的版本确实会出现该问题,解决的办法就是把tomcat换成高点版本就可以了。

posted on 2006-07-21 09:36 nbt 阅读(2727) 评论(6)  编辑  收藏 所属分类: HTML&CSS&JavaScript

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值