在form表单中,如下
[html]
<form name="infof">
<font color="red">姓名:</font> <input name="name" type="text"></input><br>
<font color="red">密码:</font> <input name="password" type="password"></input><br>
验证码:<input name="validate" type="text">
<img name="vali" border=0 src="validate.jsp" onclick="refresh()"/>
<a href="JavaScript:refresh()">看不清,换一张</a>
<br>
<input type="button" onclick="login()" value="登录"> <input
type="reset">
</form>
在验证码图片中,调用的是validate.jsp,用于生成验证码图片。这个jsp中的内容如下:
[html]
<body>
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
BufferedImage image = new BufferedImage(75, 30,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.gray);
g.fillRect(0, 0, 75, 30);
String randStr = String.valueOf(new Random().nextInt(8999) + 1000);
session.setAttribute("randStr", randStr);
g.setColor(Color.black);
g.setFont(new Font("", Font.PLAIN, 20));
g.drawString(randStr, 10, 20);
for (int i = 1; i <= 120; i++) {
int x = new Random().nextInt(75);
int y = new Random().nextInt(30);
g.setColor(Color.blue);
g.drawOval(x, y, 1, 1);
}
ImageIO.write(image, "JPEG", response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%>
</body>
好了,现在大头戏来了。
在
<img name="vali" border=0 src="validate.jsp" onclick="refresh()"/>
<a href="JavaScript:refresh()">看不清,换一张</a>
中,无论是链接还是onclick方法,都是指到js中的一个方法。
具体如下:
[javascript]
<script type="text/javascript">
function refresh(){
infof.vali.src="";
infof.vali.src="validate.jsp";
}
</script>
本来呢,infof.vali.src="";这条语句我是没有的。当我点击图片,或者点击链接的时候,我发现,validate.jsp都没有被调用。无论我怎么设置缓存设置(可能是我还没有设置到点上)
干脆,我自己想了个办法,我用这种方法 解决了刷新验证码无效的问题。
经过测试,链接和点击图片都可以~~~问题解决
摘自 MELEARNER的专栏