Java笔记--Session:避免表单的重复提交
2016-01-27 19:09
393 查看
关于表单的重复提交,其实是围绕“请求”展开,请求多次便是重复提交了
(一)表单重复提交情况:
a.表单提交“请求”到servlet后,servlet再将“请求”转发到一个jsp页面,在响应页面点击刷新。分析:点击刷新时,地址栏中的URL还是原来的请求输入的地址,点击刷新后,就是发出再一次的请求,所以表单重复提交。 b.当有网络延迟,或者线程阻塞的情况下,在响应页面没有到达时,重复点击提交按钮。分析:很明显,浏览器发出了多次请求,表单重复提交。 c.在响应页面,点击返回,再点击“提交”。分析:和a其实是一个效果
(二)如何避免表单的重复提交
a.在表单中:
<body> <% //在原表单页面,生成一个token随机值, String tokenValue=new Date().getTime() +""; %> <form method="post" action="/SuccessServlet"> <% //把token放入session中 session.setAttribute("token",tokenValue); %> <!-- 把token放入隐藏域中 --> <input type="hidden" name="token" value=<%=tokenValue %>/> name:<input type="text" name="name"/> <input type="submit" value="提交"/> </form> </body>
b.在servlet中:
//表单的token提交到servlet时,检查标记是否和已经存在的session中的token值一致, //若一致,则相应请求,并销毁标记,若不一致或者没有标记则直接相应提示信息----表单重复提交 HttpSession session = request.getSession(); Object token = session.getAttribute("token"); String tokenValue = request.getParameter("token"); if(token.equals(tokenValue) &&token != null){ session.removeAttribute("token"); }else{ response.sendRedirect(request.getContextPath()+"/error.jsp"); }
相关文章推荐
- 优化
- SpringMVC与Easyui(实现了JSON的展示)、FreeMarker的整合
- java 服务器获取请求的IP方法之总结
- Java安全之对称加密、非对称加密、数字签名
- java下实现压缩数据存取
- Fat Jar - Myeclipse插件安装使用方法- 完美解决
- 线程基础:线程(1)——操作系统和线程原理
- 嵌入jetty到Java代码
- spring aop面向切面详解,以及heibernate和mybatis的区别(缓存)
- JAVA复习
- JAVA的整型与字符串相互转换
- Java中 Comparator接口 与Comparable 的区别
- Java设计模式(五)----原型模式
- 使用Link方式给eclipse或者myeclipse添加插件如git插件
- Java Lambda表达式入门
- spring mvc,以及与mybatis整合
- Eclipse智能提示及快捷键
- Java线程中yield与join方法的区别
- JAVA技术路线图
- java双缓冲消除闪烁