每天提高一点一(生成验证码出现得问题)
来源:互联网 发布:java 转义 编辑:程序博客网 时间:2024/05/21 17:26
<%@ 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在tomcat下没有temp文件夹时会报下面异常:
javax.imageio.IIOException: Can't create output stream! javax.imageio.ImageIO.write(ImageIO.java:1521) org.apache.jsp.test_jsp._jspService(test_jsp.java:120) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) org.apache.jas
- 每天提高一点一(生成验证码出现得问题)
- 每天一点linux指令【一】
- 每天学一点(一)
- 每天一点C#(一)
- 每天一点ES6(一)
- 每天一点Vue--API(一)
- java生成验证码一
- 一段利用session生成随即验证码得代码分享
- 每天一点正则表达式复习(一)
- 每天学一点linux(一)
- 每天学一点Swift----集合(一)
- 每天学一点Swift----函数(一)
- 每天学一点Swift----闭包(一)
- 每天学一点Swift----泛型(一)
- 每天写一点代码----倒水问题(庞果网)
- 每天一点C语言--竖式问题
- 一心想去今日头条,看看现在的招聘,警醒自己,每天不能太放纵,要想提高就得不断学习,拼命努力
- 每天学一点(文件上传之验证)
- PTR_ERR
- 用VC++实现图像检索技术
- 17种正则表达式
- 简单图像匹配
- 在Option条目中填充前导空格的方法
- 每天提高一点一(生成验证码出现得问题)
- Tomcat 配置集锦
- 该死的Norton,一点专业精神都没有!
- 华为3Com Quidway 2116-SI
- 数字图像处理词汇表
- 模式识别扫盲
- PB中的Describe,Evaluatate,LookUpDisplay小结
- 理解C#中的委托和事件
- Visual C++中DDB与DIB位图编程全攻略