在jsp中,当我们刷新的时候,会重复提交,本文将讨论一下这个问题。
首先把代码写出来,然后解释一下思路
jsp页面上加一个hidden字段
<input type="hidden" name="clientToken" value="${token }">
servlet里面
下面 解释一下代码
当我们第一次提交的时候
String sessionToken = (String)session.getAttribute("sessionToken");
sessionToken的值是null
会执行if里的代码
第一次提交完,这时候返回到jsp上之后hidden字段里有值了
1.此时你刷新,String clientToken = request.getParameter("clientToken");获取clientToken值仍然为空,因为刷新,只是重复提交上一次的表单。
这时候clientToken.equals(sessionToken)判断不成立,所以执行else里的代码,也就是"这是刷新"
2.你不刷新,而是提交的话 clientToken.equals(sessionToken)是成立的。
首先把代码写出来,然后解释一下思路
jsp页面上加一个hidden字段
<input type="hidden" name="clientToken" value="${token }">
servlet里面
String clientToken = request.getParameter("clientToken");
String sessionToken = (String)session.getAttribute("sessionToken");
String time = String.valueOf(System.currentTimeMillis());
if(sessionToken==null||clientToken.equals(sessionToken)){
System.out.println("这是提交的");
session.setAttribute("sessionToken", time);
session.setAttribute("token", time);
}else{
System.out.println("这是刷新的");
}
下面 解释一下代码
当我们第一次提交的时候
String sessionToken = (String)session.getAttribute("sessionToken");
sessionToken的值是null
会执行if里的代码
第一次提交完,这时候返回到jsp上之后hidden字段里有值了
1.此时你刷新,String clientToken = request.getParameter("clientToken");获取clientToken值仍然为空,因为刷新,只是重复提交上一次的表单。
这时候clientToken.equals(sessionToken)判断不成立,所以执行else里的代码,也就是"这是刷新"
2.你不刷新,而是提交的话 clientToken.equals(sessionToken)是成立的。