日期:2014-05-17  浏览次数:20719 次

【求教】servlet和Jsp中的取值为什么不同步?
我写了一个servlet和一个JSP页面,想要完成生成图片验证码(存在“randCheckCode”中)以及验证所输入的验证码是否正确。可是每次JSP上所取得的(String)session.getAttribute("randCheckCode")和在servlet中所取得的(String)session.getAttribute("randCheckCode")值不同步。
就是说每次用(String)session.getAttribute("randCheckCode")在JSP页面上输出的验证码不是当前图片中验证码的值,而是上一次图片的值;但是servlet中取到的值和当前图片值一样。所以,每次验证的时候,我只能输入上一次图片的值才正确
部分程序如下:
JSP:
......
function confirm(checkCode1,checkCode2){
  if(checkCode1.value==""||checkCode1.value==null){
  alert("请输入验证码!");
  }else if(!(checkCode2.value==checkCode1.value)){
  alert("验证码输入错误!请重新输入!");
  }else{
  alert("输入正确!");
  }
  }
......
<% String checkCode=(String)session.getAttribute("randCheckCode");%>
......
<input name="checkCode1" type="text" id="checkCode1" maxlength="4"/>
  <input name="checkCode2" type="hidden" id="checkCode2" value="<%=checkCode %>">
  <input type="button" value="提交" onClick="confirm(checkCode1,checkCode2)"/>
  <%=(String)session.getAttribute("randCheckCode")%>//即此处值是上一次图片的值
  <img src="PictureCheckCode" id="createCheckCode"/>
......
Servlet程序:
......  
 HttpSession session = request.getSession(true);
 session.setAttribute("randCheckCode", sRand);
 System.out.println(session.getAttribute("randCheckCode")); //此处输出的值是当前图片值
......

------解决方案--------------------
session 要实时变动值。。。..可以么?
------解决方案--------------------
不知道你是怎么从servlet把验证码传递到jsp的。
这个验证码的生成最好用异步请求来做,ajax。


------解决方案--------------------
在页面上请求图像,不要把图像传到servlet中
------解决方案--------------------
我也保存了 也是异步的访问 也就是不一样