<%@ page contentType="image/jpeg"
import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,java.io.*"%>
<%!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 = 58, height = 18;
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 < 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);
}
char[] code = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', '2', '3', '4', '5', '6', '7',
'8', '9' };
// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(code[random.nextInt(54)]);
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();
OutputStream os = response.getOutputStream();
// 输出图象到页面
try {
ImageIO.write(image, "JPEG", os);
// os.flush();
// os.close();
// os = null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
} catch (Exception e) {
}finally{
os.flush();
os.close();
os = null;
}
%>
分享到:
相关推荐
1. JSP 验证码生成:使用 JSP 生成验证码,包括生成验证码图片、将验证码存入 SESSION 等。 * 使用 JSP 生成验证码图片,通过 BufferedImage 和 Graphics 实现验证码图片的生成。 * 将验证码存入 SESSION,以便...
在本主题“利用jsp生成图片验证码”中,我们将探讨如何在JavaServer Pages (JSP)上下文中创建一个简单的图片验证码,而无需使用Servlet。首先,我们要明白JSP是Java Web开发中的视图层技术,它允许我们在HTML页面中...
"jsp生成验证码很好的例子"这个标题暗示我们将探讨如何使用JavaServer Pages(JSP)技术来创建一个有效的验证码系统。 首先,验证码的生成过程包括以下几个步骤: 1. **随机字符生成**:验证码通常由一组随机的...
JSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txt
jsp生成动态验证码,jsp生成动态验证码。
在jsp登录页面生成验证码,并在登录的时候在后台进行验证码是否一致的比较。
在实际开发中,我们可以使用现成的库,如Captcha4j或JCaptcha,它们提供了许多预设的验证码样式和配置选项,使得生成验证码变得更加方便。 总的来说,生成JSP图片验证码涉及了Java图像处理、随机数生成、Session...
在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它...总的来说,理解和掌握JSP生成验证码的原理和实现方式,对于提升Web开发中的安全性具有重要意义,也是每一个Java Web开发者必备的技能之一。
在本主题中,我们关注的是"最新JSP生成验证码"的技术实现。JSP(JavaServer Pages)是Java平台上的一个动态网页技术,允许开发者在HTML页面中嵌入Java代码,以生成动态内容。现在让我们深入探讨如何在JSP中生成...
以上就是使用JSP生成验证码图片的基本原理和实现流程。在实际应用中,还可以结合其他安全措施,比如限制用户尝试次数、使用滑动验证等,进一步提高系统的安全性。同时,随着技术的发展,验证码的形式也在不断进化,...
在Web开发中,使用JSP(JavaServer Pages)来生成验证码图片是一种常见的方法。下面我们将详细讨论如何在JSP中实现验证码的生成。 首先,我们需要理解验证码的基本原理。验证码通常包含一串随机的字母和数字,有时...
总结,使用JSP生成随机验证码涉及到JSP基本语法、内置对象、字符串操作、随机数生成、图像处理以及服务器端验证等多个知识点。这个过程不仅有助于提高网站安全性,也是理解JSP和Web开发实践的重要一课。
JSP生成验证码源程序源代码
经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码
本文介绍了如何使用JSP技术动态生成验证码图片。这种方法不仅能够有效提升网站的安全性,还能根据实际需求灵活配置。开发者可以根据具体的应用场景对代码进行适当的调整,以满足不同的安全等级需求。
采用jsp 生成验证码,我自己使用过的。使用方法: <img src="./../function/imagejsp.jsp" style="float: left">
彩色验证码的实现是在生成验证码的基础上增加了颜色元素,使得验证码更难以被自动化工具识别,增强了安全性。 JSP是一种基于Java的服务器端脚本语言,用于创建动态网页。在本项目中,`code.jsp`是核心页面,它负责...
4. **响应HTTP请求**:当用户访问`checkcode.jsp`时,服务器会执行上述步骤,生成验证码图像,并将其作为HTTP响应的二进制内容返回给浏览器。同时,服务器还会将生成的验证码字符串保存在一个会话(session)变量中...
### JSP生成验证码图片:深度解析与实现细节 在当今的网络应用中,验证码作为一种防止自动化工具滥用的有效手段,被广泛应用于用户登录、表单提交等场景中。本文将深入探讨如何利用Java Server Pages(JSP)技术...
总的来说,JSP生成的数字验证码结合了Java的强大功能和网页的交互性,提供了一种简单而有效的用户验证方法。在开发过程中,确保验证码的安全性和用户体验是至关重要的。通过对验证码的不断刷新和复杂化设计,我们...