如何防止表单重复提交
2016-11-29 20:25
344 查看
javaWEB解决表单重复提交的问题(原理)
表单的重复提交
1> 重复提交的情况:
1> 在表单提交到一个Servlet,而Servlet又通过请求转发的方式响应了一个JSP(HTML)页面, 此时地址栏还保留着Servlet的那个路径,在响应页面点击“刷新”,这就是一个重复提交的情况。
2> 在响应页面没有到达时,重复点击提交按钮。
3> 点击返回,再点击提交。
2> 不是重复提交的情况:点击“返回”,“刷新”原页面,在“提交” 3> 如何避免表单的重复提交:
在表单中做一个标记,提交到Servlet时,检查标记是否存在且是否和预定义的标记一致,若一致,则受理请求, 并销毁标记,若不一致或没有标记,则直接响应提示信息:”重复提交”;
解决:把标记放在session中,可以!
1> 在原表单页面,生成一个随机值 token
<%@ page import=”java.util.Date”%>
<%
String tokenValue=new Date().getTime()+”“;
%>
2> 在原表单页面,把token值放入session 属性中
<%session.setAttribute(“token”,tokenValue); %>
}
表单的重复提交
1> 重复提交的情况:
1> 在表单提交到一个Servlet,而Servlet又通过请求转发的方式响应了一个JSP(HTML)页面, 此时地址栏还保留着Servlet的那个路径,在响应页面点击“刷新”,这就是一个重复提交的情况。
2> 在响应页面没有到达时,重复点击提交按钮。
3> 点击返回,再点击提交。
2> 不是重复提交的情况:点击“返回”,“刷新”原页面,在“提交” 3> 如何避免表单的重复提交:
在表单中做一个标记,提交到Servlet时,检查标记是否存在且是否和预定义的标记一致,若一致,则受理请求, 并销毁标记,若不一致或没有标记,则直接响应提示信息:”重复提交”;
解决:把标记放在session中,可以!
1> 在原表单页面,生成一个随机值 token
<%@ page import=”java.util.Date”%>
<%
String tokenValue=new Date().getTime()+”“;
%>
2> 在原表单页面,把token值放入session 属性中
<%session.setAttribute(“token”,tokenValue); %>
3> 在元表单页面,把token值放入到隐藏域中。 <input type="hidden" name="token" value="<%=tokenValue%>"> 4> 在目标的Servlet 中:获取session 和隐藏域中的token值 HttpSession session=request.getSession(); String token=request.getParameter("token"); Object tokenvalue=session.getAttribute("token"); 5> 比较两个值是否一致:若一致,受理请求,且把session域中的token属性清除 , 若不一致,则直接响应提示页面:"重复提交" if(tokenValue!=null&&tokenVaule.equals(token)){ session.removeAttribute("token"); }else{ response.sendRedirect("token.jsp"); return;
}
相关文章推荐
- 让框架内的页面跳出框架及如何防止表单重复提交
- Struts1、2种如何防止表单重复提交和两者的区别
- 如何防止表单重复提交
- 如何防止重复表单提交
- struts2如何防止表单重复提交
- 如何使用Struts 2防止表单重复提交?
- 如何防止表单重复提交
- 如何防止表单重复提交
- 如何使用Struts 2防止表单重复提交?
- 如何防止表单重复提交
- 如何使用Struts 2防止表单重复提交?
- 如何防止表单重复提交
- php中如何防止表单的重复提交
- 网页开发之如何防止表单重复提交
- 如何防止重复提交表单刷新
- php:如何防止表单重复提交
- php中如何防止表单的重复提交
- 如何防止表单重复提交
- 如何使用Struts 2防止表单重复提交?
- 面试题——Struts2如何防止表单重复提交