站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于验证码(在线顶呀!)

关于验证码(在线顶呀!)

摘要: 关于验证码(在线顶呀!)


-#60;%@ page contentType=-#34;image/jpeg-#34; import=-#34;java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*-#34; %-#62;
-#60;%!
Color getRandColor(int fc,int bc){//给定范围获得随机颜色
Random random = new Random();
if(fc-#62;255) fc=255;
if(bc-#62;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);
}
%-#62;
-#60;%
//设置页面不缓存
response.setHeader(-#34;Pragma-#34;,-#34;No-cache-#34;);
response.setHeader(-#34;Cache-Control-#34;,-#34;no-cache-#34;);
response.setDateHeader(-#34;Expires-#34;, 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(-#34;Times New Roman-#34;,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-#60;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 sRand=-#34;-#34;;
for (int i=0;i-#60;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(-#34;rand-#34;,sRand);


// 图象生效
g.dispose();
%-#62;

-#60;html-#62;
-#60;head-#62;
-#60;/head-#62;
-#60;body-#62;
-#60;form action=-#34;register.jsp-#34; method=-#34;POST-#34;-#62;
-#60;table-#62;
-#60;tr-#62;
-#60;td-#62;用户名: -#60;input type=-#34;text-#34; /-#62;-#60;/td-#62;
-#60;/tr-#62;
-#60;tr-#62;
-#60;td-#62;密码: -#60;input type=-#34;text-#34; /-#62;-#60;/td-#62;
-#60;/tr-#62;
-#60;tr-#62;
-#60;td-#62;验证码:-#60;input type=-#34;text-#34;/-#62;-#60;/td-#62;
-#60;td-#62;-#60;%ImageIO.write(image, -#34;JPEG-#34;, response.getOutputStream());%-#62;-#60;/td-#62;
-#60;/tr-#62;
-#60;/table-#62;
-#60;/form-#62;
-#60;/body-#62;
-#60;/html-#62;

 当我在IE打开的时候只显示只显示验证码.图片、table都看不见了。
请问那段验证码代码怎么调用 才能在指定位置显示出来





自己先顶。。。。。。。。。。


你把它当成一个图片就行了-#60;img src=-#34;.jsp-#34;-#62;


-#60;%@ page contentType=-#34;image/jpeg-#34; import=-#34;java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*-#34; %-#62;
-#60;%!
Color getRandColor(int fc,int bc){//给定范围获得随机颜色
Random random = new Random();
if(fc-#62;255) fc=255;
if(bc-#62;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);
}
%-#62;
-#60;%
//设置页面不缓存
response.setHeader(-#34;Pragma-#34;,-#34;No-cache-#34;);
response.setHeader(-#34;Cache-Control-#34;,-#34;no-cache-#34;);
response.setDateHeader(-#34;Expires-#34;, 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(-#34;Times New Roman-#34;,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-#60;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 sRand=-#34;-#34;;
for (int i=0;i-#60;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(-#34;rand-#34;,sRand);


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

ImageIO.write(image, -#34;JPEG-#34;, response.getOutputStream());
%-#62;
把上面的放到一个JSP文件里,如image.jsp

然后在用到的地方把这个JSP用-#60;jsp:include page=-#34;image.jsp-#34;/-#62;引进去即可:
-#60;%@ page contentType=-#34;text/html; charset=gb2312-#34; %-#62;
-#60;html-#62;
-#60;head-#62;
-#60;/head-#62;
-#60;body-#62;
-#60;form action=-#34;register.jsp-#34; method=-#34;POST-#34;-#62;
-#60;table-#62;
-#60;tr-#62;
-#60;td-#62;用户名: -#60;input type=-#34;text-#34; /-#62;-#60;/td-#62;
-#60;/tr-#62;
-#60;tr-#62;
-#60;td-#62;密码: -#60;input type=-#34;text-#34; /-#62;-#60;/td-#62;
-#60;/tr-#62;
-#60;tr-#62;
-#60;td-#62;验证码:-#60;input type=-#34;text-#34;/-#62;-#60;/td-#62;
-#60;td-#62;-#60;jsp:include page=-#34;image.jsp-#34;/-#62;-#60;/td-#62;
-#60;/tr-#62;
-#60;/table-#62;
-#60;/form-#62;
-#60;/body-#62;
-#60;/html-#62;


二楼说得对



HTTP Status 500 -
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception java.lang.IllegalStateException
org.apache.jasper.runtime.ServletResponseWrapperInclude.getOutputStream(ServletResponseWrapperInclude.java:62)
org.apache.jsp.verifyimage_jsp._jspService(verifyimage_jsp.java:118)
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.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
org.apache.jsp.Login_jsp._jspService(Login_jsp.java:185)
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.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.

看不到验证码。。。。。。。。。。。


↑返回目录
前一篇: 一个线程,做一个彩球随机变化的例子,请求帮助?
后一篇: Java EE 5 与 J2EE 1.4有什么区别?