应该是代码执行顺序的问题,JSP页面加载时肯定是先执行Java代码,所以<%=session.getAttribute("verifyCode")%>这段是先被执行的,第一次必然为NULL,页面渲染完毕后,你的session中才有值,所以刷新之后自然是上一次存的值。建议你的代码不要这样写。一般情况下,验证码的内容都是在提交表单之后在后台获取,页面上只要能显示出图片就OK,所以你没必要再去显示验证码的值,也不理解你显示它的意义何在?你提交表单之后,在后台通过request.getSession().getAttribute(“verifyCode”);肯定就能获取到了,从而也达到了验证的需求。

解决方案 »

  1.   


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

  2.   

    没有很懂你意思,记得以前遇到过类似的情况,跟img的src写法有关试试在 在 img 的src="servletpath"后面加上一个任意名字的动态参数“?s=new Date()”
    带参数是为了让src在servlet输出图形验证码时变化,这样图片才会刷新。采用js脚本实现验证码图片的刷新
    document.getElementById('validateImg').src="<%=path %>/loginRandom?a="+new Date();
      

  3.   

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

  4.   


    至于你说的这种验证方法,,,现在的网站都是这么验证的么?
    简单的应该都是这样~ 不难理解吧。。嗯嗯,懂了,,我已经把它放在后台验证了,这样就不会出现这样的问题了你的解释很到位,先前不理解是因为对jsp页面的执行顺序没搞懂,现在懂了。3q