JSP验证码刷新无效问题解决

本文详细阐述了在处理表单验证过程中遇到的验证码刷新问题,并提供了有效的解决方案。通过分析HTML和JavaScript代码,作者展示了如何确保每次点击刷新按钮或链接时,验证码图片都能正确更新,避免了缓存导致的无效问题。

在form表单中,如下

<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中的内容如下:

<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中的一个方法。

具体如下:

<script type="text/javascript">
		function refresh(){
			infof.vali.src="";
			infof.vali.src="validate.jsp";
			
		}
	</script>


本来呢,infof.vali.src="";这条语句我是没有的。当我点击图片,或者点击链接的时候,我发现,validate.jsp都没有被调用。无论我怎么设置缓存设置(可能是我还没有设置到点上)

干脆,我自己想了个办法,我用这种方法 解决了刷新验证码无效的问题。

经过测试,链接和点击图片都可以~~~问题解决

 

 

 

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值