放在重复提交:
1、页面多次点击按钮
解决办法:javascript控制提交,将submit改成button提交
<script type="text/javascript">
var flag = false;
function ButtonSubmit(){
if(!flag){
document.forms[0].submit();
flag = true;
}
}
</script>
2、提交完毕后,在保存页面重复刷新,一直执行保存方法
解决办法:在新增页面设置uuid,放在request,session中,将request数据放在保存页面隐藏域中。在保存的方法中取到。与session中的数据比较,如果相同就执行保存方法,保存完毕后就清除session中的值。
package com.mail.util;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
public class TokenUtil {
private TokenUtil(){}
/**
* 在提交页面放唯一token
* @param request
*/
public static void addToken(HttpServletRequest request){
String key = UUID.randomUUID().toString();
request.setAttribute("key", key);//保存页面放在隐藏域中
String sessionInRequest = UUID.randomUUID().toString();
request.setAttribute("keyInSession", sessionInRequest);//放在隐藏域中,不同页面不同session
request.getSession().setAttribute(sessionInRequest, key);
}
/**
* 保存页面比较拿到的值是否相等
* @param request
* @return 值是否相等
*/
public static boolean getTokenUtil(HttpServletRequest request){
String key = request.getParameter("key");//从保存页面拿隐藏域
String sessionInRequest = request.getParameter("keyInSession");
String keyInSession = (String) request.getSession().getAttribute(sessionInRequest);
return !StringUtils.isNotEmpty(keyInSession)&&StringUtils.isNotEmpty(key)&&key.trim().equals(keyInSession.trim());
}
/**
* 保存完毕后,清楚session中的值
* @param request
*/
public static void validate(HttpServletRequest request){
String sessionInRequest = request.getParameter("keyInSession");
request.getSession().removeAttribute(sessionInRequest);
}
}