黑马day05 session实现防止重复提交&小案例
2015-06-19 23:33
405 查看
有时候为了防止用户的重复提交我们只需要写前台的代码,一个javaScript就搞定了,但是也不妨坏人故意修改源代码,这样就防止不了重复提交,因此,我们在后台实现防止重复提交。
1.login.jsp 前台java|Script实现防止重复提交,为了后台也实现所以设置了一个随机数到session域中,然后提交表单的时候就隐藏一个随机数。以实现SubServlet的获取
如果重复提交的话:也就是说一直点击提交按钮.....前台和后天的提示:
1.login.jsp 前台java|Script实现防止重复提交,为了后台也实现所以设置了一个随机数到session域中,然后提交表单的时候就隐藏一个随机数。以实现SubServlet的获取
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv=" pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <script type="text/javascript"> var isNotSub=true;//没有重复提交 function cansub(){ if(isNotSub){//没有重复提交 isNotSub=false; return true }else{ alert("清不要重复提交!"); return false; } } </script> </head> <body> <%--随机数 --%> <% Random r=new Random(); int randomNum=r.nextInt(); session.setAttribute("randomNum", randomNum+"");//域对象中 %> <form action="${pageContext.request.contextPath }/servlet/ResubServlet" onsubmit="return cansub();" method="post"> 姓名:<input type="text" name="username"> <input type="hidden" name="randomNum" value="<%=randomNum%>"/> <input type="submit" value="提交"/> </form> </body> </html>2.SubServet实现后台的防止重复提交,如果用户是第一次提交就判断从session中取到的随机数和从表单中获取的hidden中的随机数是否一样,如果一样,则将session中域对象清空,然后输出相应的数据到浏览器,如果不一样说明是重复提交了,这个时候session中的域对象已经是null,所以两个值不相等。就提醒用户不能重复提交。
package cn.itheima.resubmit; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ResubServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); String username = request.getParameter("username"); try { Thread.sleep(1000*4); } catch (InterruptedException e) { throw new RuntimeException(e); } String r1 = request.getParameter("randomNum"); String r2 = (String) request.getSession().getAttribute("randomNum"); if(r2!=null&&!"".equals(r2)&&r1.equals(r2)){ request.getSession().removeAttribute("randomNum");//第一次提交后就把session中的对象移除 response.getWriter().write("姓名是:"+username); }else{ response.getWriter().write("请不要重复提交!ok?!"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }运行结果:
如果重复提交的话:也就是说一直点击提交按钮.....前台和后天的提示:
相关文章推荐
- Leetcode 137 Single Number II
- Binary Tree Zigzag Level Order Traversal
- GUI--Swing组件(2)
- Centos 6.5系统更改yum源为163
- 阅读笔记之《梦断代码》一
- 因特网
- 搬寝室
- Visual Studio 2012本身都是已经支持Jquery/Javascript智能提示
- Android中常常使用shape来定义控件的一些显示属性
- C语言日志处理
- 广域网优化
- Binary Tree Level Order Traversal
- java单例模式的讨论
- 补第一阶段冲刺站立会议3(应发表日期5月15日)
- 关于数列1,1,2,3,5,8,13,21,34..用C#语言编程求第n项为?
- POJ 1155 树形DP
- 使用ScrollView实现下拉刷新(一)
- linux权限
- Uniform Generator
- CODE[VS] 1214 线段覆盖