jsp 验证码以及验证码局部刷新

1.验证码的代码是在网上搜罗的,是底纹乱线类的数字验证:

authcode.jsp: 每次调用都会在 session 中添加一个属性,验证用户输入是否正确是只需再取出和输入内容比较即可

<%@ page contentType="image/JPEG"  
import
="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
pageEncoding
="GBK"%>
<%!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);
}
%>
<%
//设置页面不缓存
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(new Color());
//g.drawRect(0,0,width-1,height-1);

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(
160, 200));
for (int i = 0; i < 100; 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);
}

// 取随机产生的认证码(4位数字)
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(
"code", sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image,
"JPEG", response.getOutputStream());
%>

2. 调用以及刷新:

  <form action="welcome.jsp" method="post" name="loginform">

输入验证码:<input type="text" name="authcode" maxlength="4" size="10">
<img id="codeimg" name="codeimg" border=0 src="authcode.jsp">
<a href="javascript:reloadImage('authcode.jsp')">看不清</a><br/>

</form>
</center>
<script language="javascript" type="text/javascript">
function reloadImage(imgurl){
var getimagecode=document.getElementById("codeimg");
getimagecode.src
= imgurl + "?id=" + Math.random();
}
</script>


 

posted @ 2011-10-21 14:41  lihui_yy  阅读(5171)  评论(0编辑  收藏  举报