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

【java.util.UUID.randomUUID()】值的疑惑
<%@ page language="java" import="java.sql.*,java.util.*" pageEncoding="utf-8" %>
<html>
  <body>
 
 <% 
     String id=UUID.randomUUID().toString();
session.setAttribute("key",id);
%>
  <form name="form1" method="post">
 <input type="text" name="key" size="50%" value="<%=session.getAttribute("key")%>"><BR>
 <input type="submit"  value="提交">
 </form>

<%     
 request.setCharacterEncoding("utf-8");
 String key=request.getParameter("key");
 String ID=(String)session.getAttribute("key");  
 out.println("表单的key:"+key);
 out.println("session的key:"+ID);
%>   
</body>
</html>



打开url 如图首先



点提交 


我的理解:浏览器打开页面,首先运行java部分,生成一个key1,然后执行java中的输出语句输出key1,之后再表单里显示key1.由于没点提交,所以request.getParameter("key");的值是null
点击提交,key1被提交,java部分又一次执行(为什么?),生成一个key2,输出key2,同时在表单上显示key2,此时输出表单的是key是key1的值,key2还没有提交

那用这种方法防止刷新重复提交表单是如何实现的?讲下运行过程
运行网址是http://192.168.67.186/S2012150143/aa.jsp

------解决方案--------------------
打开url的时候指向了一个action,这个action下的方法随机出来一个key,然后return了这个key,前台接收,然后显示在下面。提交的点击事件也接收到了这个key,然后将输入的值与key作比较,若相同,return true,若不同,return false,这个函数结束时再调用一次action中的函数,就能实现楼主所描述的结果了。
------解决方案--------------------
模拟struts的token,前几天刚写了一个,
  click   this