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. uniGUI之FDQuery(28)

    1]基本设置FDQuery1.Connection2]执行查询SQL语句3]执行 非查询SQL语句4]返回所有数据 和所有 列名 1]基本设置FDQuery1.Connection 一定要 放一个   ...

  2. Foreach报错

    List<String> a = new ArrayList<String>(); 2 a.add("1"); 3 a.add("2") ...

  3. linux下使用crontab新建定时任务

    我安装了一个全文搜索的插件,但是需要生成索引才能使用,但是不能手动生成索引,所以说呢,我就加了一个定时任务, 一.首先vim /etc/crontab 打开文件 我根据上面的提示加了用户名,但是看到其 ...

  4. POJ 3041 Asteroids(二分图 && 匈牙利算法 && 最小点覆盖)

    嗯... 题目链接:http://poj.org/problem?id=3041 这道题的思想比较奇特: 把x坐标.y坐标分别看成是二分图两边的点,如果(x,y)上有行星,则将(x,y)之间连一条边, ...

  5. 安卓之图像视图ImageView

    一.有关属性说明 (1)scaleType:指定图形的拉伸类型,默认是fitCenter:拉伸类型的取值如下: (2)src:指定图形来源,src图形按照scaleType拉伸:背景图不按scaleT ...

  6. 6.Python字符串

    #header { display: none !important; } } #header-spacer { width: 100%; visibility: hidden; } @media p ...

  7. beyond compare 用法

    1.过滤器用法:点击小眼睛(回话-->回话设置)打开过滤器界面----设置多个过滤文件或目录直接使用回车键 2.比较时最好先设置编码以防出现乱码问题 工具-->文件格式. 3.比较时出现乱 ...

  8. C语言函数不能返回数组,但可以返回结构体

    为什么C语言函数可以返回结构体,却不可以返回数组?有这样的问题并不奇怪,因为C语言数组和结构体本质上都是管理一块内存,那为何编译器要区别对待二者呢? C语言函数为什么不能返回数组? 在C语言程序开发中 ...

  9. Spring学习(十)

    需要的jar包 1.Spring核心必须依赖的库:commons-logging-1.1.1.jar2.Spring IoC部分核心库: spring-beans-4.3.9.RELEASE.jar ...

  10. Java学习资源 - 其他

    http请求HttpServletRequest详解 HttpServletRequest请求转发 高并发场景下的httpClient优化使用 HttpClien高并发请求连接池 - PoolingH ...