博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
表单重复提交问题
阅读量:5233 次
发布时间:2019-06-14

本文共 3777 字,大约阅读时间需要 12 分钟。

一、常见的重复提交问题 

  a>点击提交按钮两次。 
  b>点击刷新按钮。 
  c>使用浏览器后退按钮重复之前的操作,导致重复提交表单。 
  d>使用浏览器历史记录重复提交表单。 
  e>浏览器重复的HTTP请求。

 

二、防止表单重复提交原理

  提交表单的时候提交一份随机的字符串或随机数字等等,再把这个随机的数据存到request里面,然后把表单数据提交,在后台验证的时候判断提交的这两份额外的数据是否一致,如果一致,则把其中一份删除掉,这么做的目的是防止再次提交,继续进行操作,如果不一致,则返回一个响应的页面进行提示!

 

三、代码

  项目目录

  

 

login.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6  7  8  9   10     11     12     表单重复提交问题13     
14
15
16
17
18
21 <%22 String tokenValue = new Date().getTime() + ""; 23 %>24 25 26 27 表单重复提交问题

28
29 username :
30 password :
31 32
33 <%34 session.setAttribute("token", tokenValue);35 %>36 37
38
39 40

  

success.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6  7  8  9   10     11     12     My JSP 'index.jsp' starting page13     
14
15
16
17
18
21 22 23 24 登陆成功,欢迎您,<%=request.getAttribute("username") %>25 26

 

 

 

 

  token.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6  7  8  9   10     11     12     My JSP 'index.jsp' starting page13     
14
15
16
17
18
21 22 23 24 请不要重复提交表单数据!
25 26

 

 

 

 

  TokenServlet.java

1 package com.xjh.form; 2  3 import java.io.IOException; 4 import java.io.PrintWriter; 5  6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 import javax.servlet.http.HttpSession;11 12 public class TokenServlet extends HttpServlet {13 14     public void doGet(HttpServletRequest request, HttpServletResponse response)15             throws ServletException, IOException {16         doPost(request, response);17     }18 19     public void doPost(HttpServletRequest request, HttpServletResponse response)20             throws ServletException, IOException {21         HttpSession session = request.getSession();22         Object token = session.getAttribute("token");                //session中的token23         String tokenValue = request.getParameter("token");            //表单提交的隐藏数据token24         System.out.println(token);        //第二次进来的时候这个会输出null25         System.out.println(tokenValue);26         27         if(token != null && token.equals(tokenValue)){        //第一次进来符合,把数据移除,第二次进来不符合28             session.removeAttribute("token");29         }else {30             response.sendRedirect(request.getContextPath() + "/token/token.jsp");    //请求转发31             return ;32         }33         34         String username = request.getParameter("username");35         request.setAttribute("username", username);36         System.out.println("username = " + username);37         request.getRequestDispatcher("/token/success.jsp").forward(request, response);    //请求转发38         39 //        response.sendRedirect(request.getContextPath() + "/token/success.jsp");            //请求重定向40     }41 }

 

 

 

 

访问:http://127.0.0.1:8080/demo-form/tokenServlet

 

 

http://www.cnblogs.com/Java-web-wy/

转载于:https://www.cnblogs.com/Java-web-wy/p/6366329.html

你可能感兴趣的文章
getopt_long
查看>>
TensorFlow MNIST CNN 代码
查看>>
javascript之Style物
查看>>
JSON跨域解决方案收集
查看>>
SSH框架整合总结
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
md5sum命令详解
查看>>
[bzoj1004] [HNOI2008] Cards
查看>>
应该是实例化对象的没有对属性赋值时,自动赋值为null,但不是空指针对象引用...
查看>>
原生HttpClient详细使用示例
查看>>
几道面试题
查看>>
Factory Design Pattern
查看>>
python中贪婪与非贪婪
查看>>
guava API整理
查看>>
无锁编程笔记
查看>>
jquery mobile
查看>>
如何在vue单页应用中使用百度地图
查看>>
Springboot使用步骤
查看>>
Spring属性注入
查看>>