关于生成验证码的问题
我有个静态页面要调用一个jsp页面生成一个验证码,我改怎样写。大家指教一下。
html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="" />
<title>首页 - </title>
<link href="css/site.css" rel="stylesheet" type="text/css">
<script language="javascript">
<!--
function docheck(){
if(document.form1.author.value.length<=1){
alert("请输入昵称!");
document.form1.author.focus();
return false;
}
if(document.form1.contact.value.length<=2){
alert("联系方式请留详细点,以方便联系!");
document.form1.contact.focus();
return false;
}
if(document.form1.question.value.length<5){
alert("请把内容写长些!");
document.form1.question.focus();
return false;
}
if(document.form1.question.value.length>520){
alert("内容太长了,请控制在260个字以内!");
document.form1.question.focus();
return false;
}
if(document.form1.all("code").value == null || document.form1.all("code").value == "" ){
alert("请输入检验码!");
document.form1.all("code").focus();
return false;
}
document.form1.submit();
return true;
}
//-->
</script>
<style type="text/css">
<!--
.rightbox td{padding:5px;}
-->
</style>
</head>
<body>
<!--中间样式开始-->
<div class="main">
<div class="leftbox">
<h2>在线留言</h2>
<ul>
<li class="pic"><img src="images/left_rjdz1.jpg" /></li>
</ul>
<h3><a href="about4.html" target="_blank" class="left_link3">联系我们</a></h3>
<div class="rightbox">
<h2>在线留言</h2>
<p><br>
<form id="form1" name="form1" method="post" action="" target="_self">
<table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#F3F3F3">
<tr>
<input type="hidden" name="cid" value="001" />
<td width="13%" bgcolor="ffffff" ><div align="right">昵 称:</div></td>
<td width="87%" nowrap="nowrap" bgcolor="ffffff" ><div align="left">
<input name="author" type="text" size="16" maxlength="16" style="font-size:12px"/>
</div></td>
</tr>
<tr>
<td bgcolor="ffffff" ><div align="right">联系方式:</div></td>
<td nowrap="nowrap" bgcolor="ffffff" ><div align="left">
<input name="contact" type="text" size="38" style="font-size:12px"/>
(该项不会被公开显示,只有网站客服人员才能看到)</div></td>
</tr>
<tr>
<td valign="middle" bgcolor="ffffff" ><div align="right">问题内容: </div></td>
<td valign="middle" nowrap="nowrap" bgcolor="ffffff"><div align="left">
<textarea name="question" cols="40" rows="5" style="font-size:12px"></textarea>
(请控制在260字以内。)</div></td>
</tr>
<tr>
<td valign="middle" bgcolor="ffffff" ><div align="right">检验码:</div></td>
<td valign="middle" nowrap="nowrap" bgcolor="ffffff"><div align="left">
<input name="code" type="text" size="14" />
</div>
<div align="left"><img src="/share/code.jsp" border="0"/></div></td>
</tr>
<tr>
<td bgcolor="ffffff" ><div align="right"> </div></td>
<td nowrap="nowrap" bgcolor="ffffff" ><div align="left">
<input name="button1" type="image" size="38" src="images/tijiao.gif" onClick="docheck();" style="font-size:12px"/>
<input name="submit1" type="image" size="38" src="images/quxiao.gif" style="font-size:12px" onClick="history.back(-1)"/>
</div></td>
</tr>
</table>
</form>
</p>
</div>
</div>
<!--中间样式开始--><!-- #BeginLibraryItem "/Library/foot.lbi" --><!--底文件开始-->
</body>
</html>
这个code.jsp就是生成验证码的jsp我该怎样写
[解决办法]
<%@ page pageEncoding="GB2312"%>
<%@ page import="java.util.*"%>
<%
/** 设置页面不缓存 */
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
/** 生成随机类 */
Random random = new Random();
/** 取随机产生的认证码(4位数字) */
String sRand="";
for (int i = 0;i < 4;i++){
String rand = String.valueOf(random.nextInt(10));
sRand = sRand + rand;
}
/** 将认证码存入SESSION */
session.setAttribute("rand",sRand);
%>
[解决办法]
code.jsp
- Java code
/** 将认证码存入SESSION */session.setAttribute("imagecode",sRand);
[解决办法]
<%@ 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("ccode",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>