今日工作:
1、Jsp页面的刷新或者浏览器的前后通知按钮,导致表单的重复提交。
前端的控制只能是控制前端的提交次数只能是一次,提交一次之后不能提交或者提交一次之后隐藏按钮。如果是jsp页面,那么会存在刷新页面和浏览器的前进按钮,控制提交就会出问题。
接下来使用Servlet来生成表单,然后通过Servlet来控制提交次数(基于JSP/Servlet):
1)在表单中建立一个hidden的隐藏域,用来放token的参数。
<input type="text" name="token" value="${token}" hidden="hidden" />
2)在服务端生成token,放入session中。String token = UUID.randomUUID().toString();
//生成了token 然后放入session中
HttpSession session = request.getSession();
System.out.println("存入session的token:"+token);
session.setAttribute("token", token);
3)提交表单以后,Servlet获取隐藏域的formToken和session中的token,然后做对比,如果相同,
那么处理数据,然后清空session的token值。
HttpSession session = request.getSession();
// 获取表单的隐藏值,token
String formToken = request.getParameter("token");
// 获取session中的token
String token = (String) session.getAttribute("token");
System.out.println("formToken:"+formToken+" token:"+token);
// 1、比较token是否一致
if (token.equalsIgnoreCase(formToken)) {
// 2、清楚session的token
session.setAttribute("token", "");
String id = request.getParameter("id");
String name = request.getParameter("name");
System.out.println("id:" + id +" name:" + name);
}
2、controlle处理完用户提交的数据后,重定向到另一个controlle或是一个页面,
使用户提交后,所停留的位置,不是当前处理数据的controlle,这样用户再刷新时,就不会再次
执行这个controlle了,就会避免表单重复提交的问题了。
弊端:会丢失参数。
明日安排: 明日参加会议,准备好需要用到的java环境,为教学的环境以及软件安装作指导。