刚QQ的一个编程群里有朋友说网上找了很多验证码的代码,可是图片都是显示叉叉
然后我怀疑可能是图片路径不正确,他把代码发出来后,我复制下来运行了下,发现图片显示正常
然后发现原来是服务器问题,因为我用tomcat运行图片显示正常,resin运行则是叉叉,而那位提问的朋友用的正是resin。。。
之后他又去找resin可用的验证码代码,对比后跟我说要在tomcat可运行的代码前加上out.clear(),那样本来显示叉叉的就也可以用了。。。
这个问题引起了我的兴趣,上百度查了下“resin out.clear()”,才知道原因
在Resin下要在页面中加上禁止缓存的语句,尤其重要的是out.clear()
究其原因是因为验证码的图片并不另外在硬盘上生成,而是直接在内存中生成的,所以必须清空了缓存才行。。。
下面把那段tomcat下运行成功地验证码代码+注释贴上来,方便查阅的朋友使用,若想在resin下运行的话请自己在其中加入out.clear()的命令
-----------------------------------------------------------------------------------------------------------------------------
<%@ page contentType="image/jpeg" import="java.awt.*,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);
}
%>
<%
//设置页面不缓存
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<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);
}
// 取随机产生的认证码(4位数字)
//String rand = request.getParameter("rand");
//rand = rand.substring(0,rand.indexOf("."));
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());
%>
-----------------------------------------------------------------------------------------------------------------------------
分享到:
相关推荐
jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码jsp验证码代码
JSP 验证码 字母 数字JSP 验证码 字母 数字JSP 验证码 字母 数字JSP 验证码 字母 数字JSP 验证码 字母 数字
JSP 验证码代码 JSP 验证码代码 JSP 验证码代码 JSP 验证码代码 JSP 验证码代码 JSP 验证码代码 JSP 验证码代码 JSP 验证码代码
jsp验证码,jsp中文验证码,数字验证码,汉字验证码
jsp验证码实现源代码,用jsp做注册验证码
jsp验证码......源码下载jsp验证码......源码下载jsp验证码......源码下载
jsp验证码图片例子jsp验证码图片例子jsp验证码图片例子
JSP验证码大全之中文验证码(源码),很好的jsp学习源码验证示例!
jsp验证码代码 在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序破解方式进行不断的登陆尝试的方式。 此演示程序包括三个文件: 1.login.jsp:登录页面 2.code.jsp:生成验证码图片页面 3....
JSP验证码+自动刷新功能,文件的image.jsp是负责生成验证码的,而display.jsp是负责显示效果.简单易用,平时会出现的异常都已经全部解决.
基于JSP写的验证码代码,内附有ppt,仅供大家参考。 基于JSP写的验证码代码,内附有ppt,仅供大家参考。 基于JSP写的验证码代码,内附有ppt,仅供大家参考。 基于JSP写的验证码代码,内附有ppt,仅供大家参考。
这是一个关于数字做的jsp验证码,有不足的地方希望楼上的朋友给点意见!我想我会做的更好的!
JSP验证码登录程序 Servlet生成验证码 登录验证验证码
本小例子,通过JSP+servlet 实现的验证码! 可以直接移植到你的项目中去! 如果你正在寻找验证码的小插件,那么这就是你所需要的!
5种JSP验证码的源代码.rar
使用javascript生成验证码刷新功能
JSP数字验证码 JSP数字验证码 JSP数字验证码 JSP数字验证码 JSP数字验证码
四、实验内容 1.在实验四基础上使用AJAX技术实现异步登录功能。(40分) Ajax异步的特点为:多个事件并行发生,事件互不影响,请求之后,不刷新整张页面,页面不动,只是刷新页面的局部。异步数据获取技术 ...
经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码经典JSP生成验证码
简单的jsp验证码。