用servlet写了个随机产生的验证码并通过ImageIO.write输出,,同时在方法中在产生验证码之后通过request.getSession().setAttribute(“verifyCode”,verifyCode)设置,,然后在前台img标签中的src属性指向servlet的地址。。。。并设置了一个input标签,标签中value=”<=session.getAttribute(“verifyCode”)>”。。。。但是问题产生了,,,为什么input的value值总是刷新页面前那个页面产生的验证码?? 小弟表达能力有限,,所以献上代码。 //Servlet的doGet方法中的代码 //设置g的一系列参数,,,省略…………… String verifyCode = verifyCode(); //verifyCode()是自己写的私有方法,用于产生随机代码 //……… //前台jsp页面的代码 此时若是第一次加载此页面,那么input里面为空,,,刷新此页面之后,input里面的文本值为上一个页面产生的验证码,,请问这是为什么,,,难道是我不小心又执行了一次生成验证码的方法?? |
|
10分 |
应该是代码执行顺序的问题,JSP页面加载时肯定是先执行Java代码,所以<%=session.getAttribute(“verifyCode”)%>这段是先被执行的,第一次必然为NULL,页面渲染完毕后,你的session中才有值,所以刷新之后自然是上一次存的值。建议你的代码不要这样写。
一般情况下,验证码的内容都是在提交表单之后在后台获取,页面上只要能显示出图片就OK,所以你没必要再去显示验证码的值,也不理解你显示它的意义何在?你提交表单之后,在后台通过request.getSession().getAttribute(“verifyCode”);肯定就能获取到了,从而也达到了验证的需求。 |
我的那个input本来是hidden,然后设置了id,在前端js中,准备用来获取然后跟输入的验证码作对比,,以达到验证表单的作用,,,但是发现每次都不成功,所以设置成type=“text”,,显示出来,,这里为了表述清楚,没有说那么多,所以直接这么说了。。。。我再琢磨琢磨你的回复吧。。。 |
|
至于你说的这种验证方法,,,现在的网站都是这么验证的么? |
|
简单的应该都是这样~ 不难理解吧。。 |
|
长知识来了、
|
|
5分 |
没有很懂你意思,记得以前遇到过类似的情况,跟img的src写法有关
试试在 在 img 的src=”servletpath”后面加上一个任意名字的动态参数“?s=new Date()” 采用js脚本实现验证码图片的刷新 |
哈哈,这问题我以前也遇过,挺搞笑的
|
|
5分 |
代码没什么问题,先session.setAttr ,然后页面session.getAttr, 看起来没问题
之所以出现楼主的问题,是因为刷新页面时根本没再执行生成验证码的代码,因为你的img的src路径没有改变,浏览器缓存了,你在src后面添加一个随机数的参数即可。 |
嗯嗯,懂了,,我已经把它放在后台验证了,这样就不会出现这样的问题了。。。你的解释很到位,先前不理解是因为对jsp页面的执行顺序没搞懂,现在懂了。。。。3q |
|
嗯,我把验证码放在后台验证就解决了这种问题。。。不过你这种思路我回头也会试试的。 |
|
嗯,我把验证码放在后台验证就解决了这个问题,,回头你这种思路我也会尝试尝试的。 |