用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码

J2EE 码拜 9年前 (2015-04-21) 1019次浏览 0个评论
 

用servlet写了个随机产生的验证码并通过ImageIO.write输出,,同时在方法中在产生验证码之后通过request.getSession().setAttribute(“verifyCode”,verifyCode)设置,,然后在前台img标签中的src属性指向servlet的地址。。。。并设置了一个input标签,标签中value=”<=session.getAttribute(“verifyCode”)>”。。。。但是问题产生了,,,为什么input的value值总是刷新页面前那个页面产生的验证码??    小弟表达能力有限,,所以献上代码。

//Servlet的doGet方法中的代码
BufferedImage image = new BufferedImage(……);
Graphics g = image.getGraphics();

//设置g的一系列参数,,,省略……………

String verifyCode = verifyCode();     //verifyCode()是自己写的私有方法,用于产生随机代码
request.getSession().setAttribute(“verifyCode”,verifyCode);

//………
ImageIO.write(……)  //将此图片输出

//前台jsp页面的代码
<img src=”//此处为servlet的mapping”><input type=”text” value=”<%=session.getAttribute(“verifyCode”)%>”>

此时若是第一次加载此页面,那么input里面为空,,,刷新此页面之后,input里面的文本值为上一个页面产生的验证码,,请问这是为什么,,,难道是我不小心又执行了一次生成验证码的方法??

用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
10分
应该是代码执行顺序的问题,JSP页面加载时肯定是先执行Java代码,所以<%=session.getAttribute(“verifyCode”)%>这段是先被执行的,第一次必然为NULL,页面渲染完毕后,你的session中才有值,所以刷新之后自然是上一次存的值。建议你的代码不要这样写。

一般情况下,验证码的内容都是在提交表单之后在后台获取,页面上只要能显示出图片就OK,所以你没必要再去显示验证码的值,也不理解你显示它的意义何在?你提交表单之后,在后台通过request.getSession().getAttribute(“verifyCode”);肯定就能获取到了,从而也达到了验证的需求。

用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
引用 1 楼 wlwlwlwl015 的回复:

应该是代码执行顺序的问题,JSP页面加载时肯定是先执行Java代码,所以<%=session.getAttribute(“verifyCode”)%>这段是先被执行的,第一次必然为NULL,页面渲染完毕后,你的session中才有值,所以刷新之后自然是上一次存的值。建议你的代码不要这样写。

一般情况下,验证码的内容都是在提交表单之后在后台获取,页面上只要能显示出图片就OK,所以你没必要再去显示验证码的值,也不理解你显示它的意义何在?你提交表单之后,在后台通过request.getSession().getAttribute(“verifyCode”);肯定就能获取到了,从而也达到了验证的需求。

我的那个input本来是hidden,然后设置了id,在前端js中,准备用来获取然后跟输入的验证码作对比,,以达到验证表单的作用,,,但是发现每次都不成功,所以设置成type=“text”,,显示出来,,这里为了表述清楚,没有说那么多,所以直接这么说了。。。。我再琢磨琢磨你的回复吧。。。

用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
引用 1 楼 wlwlwlwl015 的回复:

应该是代码执行顺序的问题,JSP页面加载时肯定是先执行Java代码,所以<%=session.getAttribute(“verifyCode”)%>这段是先被执行的,第一次必然为NULL,页面渲染完毕后,你的session中才有值,所以刷新之后自然是上一次存的值。建议你的代码不要这样写。

一般情况下,验证码的内容都是在提交表单之后在后台获取,页面上只要能显示出图片就OK,所以你没必要再去显示验证码的值,也不理解你显示它的意义何在?你提交表单之后,在后台通过request.getSession().getAttribute(“verifyCode”);肯定就能获取到了,从而也达到了验证的需求。

至于你说的这种验证方法,,,现在的网站都是这么验证的么?

用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
引用 3 楼 bbos1994 的回复:
Quote: 引用 1 楼 wlwlwlwl015 的回复:

应该是代码执行顺序的问题,JSP页面加载时肯定是先执行Java代码,所以<%=session.getAttribute(“verifyCode”)%>这段是先被执行的,第一次必然为NULL,页面渲染完毕后,你的session中才有值,所以刷新之后自然是上一次存的值。建议你的代码不要这样写。

一般情况下,验证码的内容都是在提交表单之后在后台获取,页面上只要能显示出图片就OK,所以你没必要再去显示验证码的值,也不理解你显示它的意义何在?你提交表单之后,在后台通过request.getSession().getAttribute(“verifyCode”);肯定就能获取到了,从而也达到了验证的需求。

至于你说的这种验证方法,,,现在的网站都是这么验证的么?

简单的应该都是这样~ 不难理解吧。。

用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
长知识来了、
用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
5分
没有很懂你意思,记得以前遇到过类似的情况,跟img的src写法有关

试试在 在 img 的src=”servletpath”后面加上一个任意名字的动态参数“?s=new Date()”
带参数是为了让src在servlet输出图形验证码时变化,这样图片才会刷新。

采用js脚本实现验证码图片的刷新
document.getElementById(“”validateImg””).src=”<%=path %>/loginRandom?a=”+new Date();

用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
哈哈,这问题我以前也遇过,挺搞笑的
用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
5分
代码没什么问题,先session.setAttr ,然后页面session.getAttr, 看起来没问题
之所以出现楼主的问题,是因为刷新页面时根本没再执行生成验证码的代码,因为你的img的src路径没有改变,浏览器缓存了,你在src后面添加一个随机数的参数即可。
用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
引用 4 楼 wlwlwlwl015 的回复:
Quote: 引用 3 楼 bbos1994 的回复:
Quote: 引用 1 楼 wlwlwlwl015 的回复:

应该是代码执行顺序的问题,JSP页面加载时肯定是先执行Java代码,所以<%=session.getAttribute(“verifyCode”)%>这段是先被执行的,第一次必然为NULL,页面渲染完毕后,你的session中才有值,所以刷新之后自然是上一次存的值。建议你的代码不要这样写。

一般情况下,验证码的内容都是在提交表单之后在后台获取,页面上只要能显示出图片就OK,所以你没必要再去显示验证码的值,也不理解你显示它的意义何在?你提交表单之后,在后台通过request.getSession().getAttribute(“verifyCode”);肯定就能获取到了,从而也达到了验证的需求。

至于你说的这种验证方法,,,现在的网站都是这么验证的么?

简单的应该都是这样~ 不难理解吧。。

嗯嗯,懂了,,我已经把它放在后台验证了,这样就不会出现这样的问题了。。。你的解释很到位,先前不理解是因为对jsp页面的执行顺序没搞懂,现在懂了。。。。3q

用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
引用 6 楼 stormwy 的回复:

没有很懂你意思,记得以前遇到过类似的情况,跟img的src写法有关

试试在 在 img 的src=”servletpath”后面加上一个任意名字的动态参数“?s=new Date()”
带参数是为了让src在servlet输出图形验证码时变化,这样图片才会刷新。

采用js脚本实现验证码图片的刷新
document.getElementById(“”validateImg””).src=”<%=path %>/loginRandom?a=”+new Date();

嗯,我把验证码放在后台验证就解决了这种问题。。。不过你这种思路我回头也会试试的。

用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
引用 8 楼 lmj623565791 的回复:

代码没什么问题,先session.setAttr ,然后页面session.getAttr, 看起来没问题
之所以出现楼主的问题,是因为刷新页面时根本没再执行生成验证码的代码,因为你的img的src路径没有改变,浏览器缓存了,你在src后面添加一个随机数的参数即可。

嗯,我把验证码放在后台验证就解决了这个问题,,回头你这种思路我也会尝试尝试的。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明用servlet写了个验证码,刷新页面获得到的验证码总是前一个页面的验证码
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!