1:首先java 后台代码生成一个token,然后保存到jsp 页面的一个隐藏控件并且保存到set session中

 */
@RequestMapping("/yuDengJi")
public String registrationAdd(HttpSession session, HttpServletResponse response, Model model, HttpServletRequest request,String exhiId,String canGuanId,String ispay,String type,String hangYe) {
YuDengJi rsEx = new YuDengJi();
rsEx.setExhiId(exhiId);//展览ID
rsEx.setType(type);//类型(0参展团1参观团,2标准展位,3门票) model.addAttribute("exhiId", exhiId);//展馆ID
model.addAttribute("canGuanId",canGuanId);//参观ID
model.addAttribute("ispay",ispay);//参观团详细页面意向登记只显示参观
model.addAttribute("hangYe", hangYe);//行业id model.addAttribute("tyep", type);//类型(0参展团1参观团,2标准展位,3门票)
model.addAttribute("countYuDengJi", yuDengJiService.getCountYuDengJi(rsEx));//已经登记的参展或参观的个数
String token = UUID.randomUUID().toString();//生成token 然后保存到jsp 页面的隐藏控件
session.setAttribute("yudengjiToken", token);
model.addAttribute("token", token); return "modules/yudengji/addYuDengJi";
}

2:当用户提交表单时到后台Controller 类保存方法进行判断,当token 等于null 时 或者 隐藏控件的token 值 不等于session 的token 值就判断操作为多次提交表单

    @ResponseBody
@RequestMapping("/yuDengJi/saveExhibitors")
public String saveRegistration(HttpSession session, HttpServletResponse response, Model model, HttpServletRequest request,String type,String hangYe,String token) {
YuDengJi rsEx = new YuDengJi();
rsEx.setCompanyName(request.getParameter("companyName").trim());// 公司名称
rsEx.setType(type);// 类型
rsEx.setCanZhanMianJi(Double.parseDouble(request.getParameter("canZhanMianJi").trim()));// 意向参展面积
rsEx.setCanZhanYuSuan(Double.parseDouble(request.getParameter("canZhanYuSuan").trim()));//参展预算
rsEx.setName(request.getParameter("name").trim());// 联系人姓名
rsEx.setPhone(request.getParameter("phone").trim());// 联系人手机号码
rsEx.setMail(request.getParameter("mail").trim());// 邮箱
rsEx.setKaoChaDi(request.getParameter("kaoChaDi").trim());// 意向考察目的地
String exhiId = request.getParameter("exhiId").trim();
rsEx.setExhiId(exhiId);//展览ID
rsEx.setHangYe(hangYe);//关联行业 Account account = (Account)session.getAttribute(Constants.ACCOUNT);
String accountId = account.getId();
if(!"".equals(accountId) && accountId !=null){//用户ID
rsEx.setAccountId(Integer.parseInt(accountId));
}
try {
String yudengjiToken = (String)session.getAttribute("yudengjiToken");
if(yudengjiToken == null || !yudengjiToken.equals(token)){ }else{
yuDengJiService.save(rsEx);
session.removeAttribute("yudengjiToken");
} return "ok";
/*String ulr = "redirect:" + frontPath + "/exhi/product-"+exhiId+urlSuffix;
System.out.println("ulr>>>>"+ulr);
return "redirect:" + frontPath + "/exhi/product-"+exhiId+urlSuffix;*/
} catch (Exception e) {
e.printStackTrace();
return "no";
}
}

3:用完后记得从session 中 remove 掉token

session.removeAttribute("yudengjiToken");

jsp 防止表单多次提交的更多相关文章

  1. jsp验证表单后再提交

    在提交表单时,我们常常需要验证核实表单内容,若都不为空时,方能提交:若有文本框为空则不提交,并获取鼠标焦点到文本框上 ,所以我们可以利用onsubmit的方法来做,请看下面例子: <html&g ...

  2. struts2 文件的上传下载 表单的重复提交 自定义拦截器

    文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...

  3. Session机制三(表单的重复提交)

    1.表单的重复提交的情况 在表单提交到一个servlet,而servlet又通过请求转发的方式响应了一个JSP页面,这个时候地址栏还保留这servlet的那个路径,在响应页面点击刷新. 在响应页面没有 ...

  4. HttpSession解决表单的重复提交

    1). 重复提交的情况: ①. 在表单提交到一个 Servlet, 而 Servlet 又通过请求转发的方式响应一个 JSP(HTML) 页面, 此时地址栏还保留着 Serlvet 的那个路径, 在响 ...

  5. Struts2 - 表单的重复提交问题

    用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...

  6. JSP的表单处理

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/form-processing.html: 当需要从浏览器向Web服务器传递一些信息并最终将信息返回到后端 ...

  7. HttpSession之表单的重复提交 & 验证码

    如果采用 HttpServletResponse.sendRedirct() 方法将客户端重定向到成功页面,将不会出现重复提交问题 1.表单的重复提交 1). 重复提交的情况: ①. 在表单提交到一个 ...

  8. php中如何防止表单的重复提交

    在php中如何防止表单的重复提交?其实也有几种解决方法. 下面小编就为大家介绍一下吧.需要的朋友可以过来参考下 代码: <?php /* * php中如何防止表单的重复提交 * by www.j ...

  9. php-- 避免表单的重复提交

    用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...

随机推荐

  1. 「JSOI2015」染色问题

    「JSOI2015」染色问题 传送门 虽然不是第一反应,不过还是想到了要容斥. 题意转化:需要求满足 \(N + M + C\) 个条件的方案数. 然后我们就枚举三个数 \(i, j, k\) ,表示 ...

  2. iOS 实现 摇一摇

    摇一摇功能:调用了系统自带加速器,当设备摇动时,系统会 计算出加速器的加速值,然后告诉设备是否发生摇动手势,系统只会运动开始和结束时通知你,并不会在运动发生的整个过程中始终向你报告每一次运动.例如,你 ...

  3. No module named '_ctypes'

    3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可. #yum install libffi-devel -y #make install 若在安装前移除了/usr/b ...

  4. 「CF815C」Karen and Supermarket

    传送门 Luogu 解题思路 树形背包. 设 \(f[i][j][0/1]\) 表示在以 \(i\) 为根的子树中选 \(j\) 件商品的最少花费. 边界条件: \(f[i][j][0] = \min ...

  5. 「JSOI2013」游戏中的学问

    「JSOI2013」游戏中的学问 传送门 考虑 \(\text{DP}\) 设 \(dp_{i, j}\) 表示将前 \(i\) 个人分成 \(j\) 个集合,并且第 \(i\) 个人在第 \(j\) ...

  6. 鸡汤 - Choice is yours

    传送门 https://kamranahmed.info/blog/2018/03/24/choice-is-yours/ Our whole lives are driven by the choi ...

  7. C:gcc的基本使用

    分布编译 预处理:gcc -E hello.c -o hello.i 编 译:gcc -S hello.i -o hello.s 汇 编:gcc -c hello.s -o hello.o 链 接:g ...

  8. Python:字典类型

    概念 无序的,可变的,键值对集合 定义 方式1 {key1: value1, key2: value2, ......} 方式2 fromkeys(S, v=None) 静态方法:类和对象都可以调用 ...

  9. JQuery选择器&过滤器

    JQuery对象: JQuery对象的本质上是DOM数组,它对DOM元素进行了封装 JQuery对象和JavaScript对象可以互转(\$()/$obj()[i]),但是JQuery对象和Javas ...

  10. ubuntu16.04安装node.js、npm

    ubuntu16.04安装node.js.npm1.请尽量避免在 Ubuntu 上使用 apt-get 来安装 node.js, 如果你已经这么做了,请手动移除: sudo apt-get purge ...