<%@ 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