最近在做项目时遇到了一个问题,struts1 Token验证, 更新的Action中有验证Token,成功后我又saveToken了,然后跳转到一览画面,在一览画面中我看到saveToken后产生的新的token值,但我在一览画面点击F5刷新画面的时候,后来传过来的Request里面的Token值却是上一个画面的Token值,并不是我一览画面新产生的Token值,这点非常不理解,由于是服务嚣端跳转,页面上的URL仍然显示的是刚才更新的那个URL的Action地址,但画面已经迁移走了,但刷新时request里面的值却是上一个画面的值,不理解为什么?

解决方案 »

  1.   

    你转发的,request在这两个页面是共享的,request中的值是没有改变的。
      

  2.   

    刚才试了下,点F5和直接在URL地址栏回车效果是不一样的 ,现在问题转变到了,F5与URL地址栏回车的区别了。
      

  3.   

    上网查了下,F5与地址栏回车的区别,F5是在原来的画面刷新,地址栏回车是跳转到当前地址栏URL,因为是服务嚣端跳转,客户端并不知道真实的URL是什么,所以当我按F5的时候,他提交的还是上一个画面的内容,就相当于是在原来的画面提交的,就产生了二次提交的问题。呵呵,不知道理解的对不对,但通过做实验和网上查阅的资料来看这么解释是OK的。
      

  4.   

    F5 和 地址栏回车 的唯一区别是:当之前的请求为POST时,F5会重新发起一次原POST请求,而地址栏回车就变成GET请求了
      

  5.   

    forward是服务器端跳转,所以不改变地址啊!!你刷新一遍还是提交的上一次的。如果想要客户端重定向,用sendRedirect。
      

  6.   

    另外,IE的话,地址栏回车和F5是两回事