发布网友 发布时间:2022-04-23 22:41
共1个回答
热心网友 时间:2022-04-23 10:49
实际当中很少用这种纯JSP的验证码技术,缺乏安全性,下面有一个这样的纯JSP的例,参考别人的,你可以看看。http://hi.baidu.com/xdsh99/item/930073d241eec511d78ed015
纯数字验证码
在JSP页面body区域编写如下代码:
导入java.awt.*,java.awt.image.BufferedImage,javax.imageio.ImageIO包
<%
//验证码边框的长高
int width = 60;
int height = 20;
//用RGB模式输出图像区域
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//定义画笔
Graphics graph = image.getGraphics();
//设置验证码框背景色0-255
graph.setColor(new Color(200, 200, 200));
//填充矩形
graph.fillRect(0, 0, width, height);
//产生1000-9999之间的随机数
Random rnd = new Random();
int rndNum = rnd.nextInt(99) + 1000;
//此处为何转换为String型的用int型的效果一样?
String rndStr = String.valueOf(rndNum);
session.setAttribute("rndStr", rndNum);
//设置矩形区域中随机数及干扰点的颜色
graph.setColor(Color.RED);
//设置随机数的字体大小
graph.setFont(new Font("",Font.PLAIN,20));
//在已有的矩形区域中绘制随机数
graph.drawString(rndStr, 8, 17);
//随机产生100个干扰点
for (int i = 0; i < 100; i++)
{
int x = rnd.nextInt(width);
int y = rnd.nextInt(height);
//设置干扰点的位置长宽
graph.drawOval(x, y, 1, 1);
}
//将图像输出到页面上
ImageIO.write(image, "JPEG", response.getOutputStream());
//清空缓冲区
out.clear();
out = pageContext.pushBody();
%>