大佬教程收集整理的这篇文章主要介绍了JavaWeb 案例9 — 表单重复提交问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
提交完表单。 服务器使用请求转来进行页面跳转。 这个时候, 用户按下功能键 F5, 就会发起最后一次的请求。造成表单重复提交问题。 解决方法: 使用重定向来进行跳转
用户正常提交服务器, 但是由于网络延迟等原因, 迟迟未收到服务器的响应, 这个时候, 用户以为提交失败,就会着急, 然后多点了几次提交操作, 也会造成表单重复提交。
用户正常提交服务器。 服务器也没有延迟, 但是提交完成后, 用户回退浏览器。 重新提交。 也会造成表单重复提交。
为了防止用户重复提交或其他一些恶意的行为,可以在服务器端采用一定的措施防止用户重复提交,如下几种方案:
UUID 是通用唯一识别码(Universally Unique Identifier)的缩写,是一个全球唯一的32为的16进制的随机数,它保证对在同一时空中的所有机器都是唯一的。
思路:
① 在提交表单的 jsp 中生成一个 UUID,并将它作为 Token 存放到 session 域和表单的隐藏域中。
② 用户提交表单后,可以获取表单隐藏域中的 Token,然后再从 session 域中获取 Token
③ 比较两个 Token 是否相同,如果相同,进行提交,并且把 session 域中的 Token 移除;如果不同,则不进行提交工作。
代码示例:
1 // 登录的 jsp 页面
2 <%
3 String uuid = UUID.randomUUID().toString().replace("-", "");
4 session.setAttribute("uuid", uuid);
5 %>
6 <form action="LoginServlet" method="post">
7 <input type="hidden" value="<%=uuid %>" name="uuid2">
8 <label>用户名称:</label>
9 <input class="itxt" type="text" placeholder="请输入用户名" autocomplete="off" tabindex="1" name="username" />
10 <br />
11 <br />
12 <label>用户密码:</label>
13 <input class="itxt" type="password" placeholder="请输入密码" autocomplete="off" tabindex="1" name="password" />
14 <br />
15 <br />
16 <input type="submit" value="登录" id="sub_btn" />
17 </form>
18
19 //处理登录的 Servlet
20 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
21 HttpSession session = request.getSession();
22
23 //分别取session域和隐藏域中的uuid值
24 String uuid2 = request.getParameter("uuid2");
25 Object uuid = session.getAttribute("uuid");
26
27 //判断是否相等,
28 if(uuid != null && uuid.toString().equals(uuid2)) {
29 //相等:提交,移除session域中的Token
30 System.out.println("提交啦!!!哈哈");
31 session.removeAttribute("uuid");
32 }
33 System.out.println("end!");
34
35 }
验证码
以上是大佬教程为你收集整理的JavaWeb 案例9 — 表单重复提交问题全部内容,希望文章能够帮你解决JavaWeb 案例9 — 表单重复提交问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。