表单重复提交原理图
1、Servelt的表单重复提交的一种解决方案
session存验证码
比如在登录时,可以通过验证码存在session中来解决
login.jsp
用户名:
密码:
验证码:
ValidateCodeServlet@WebServlet("/ValidateCodeServlet")
publicclassValidateCodeServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//创建验证码对象
ValidateCodecode=newValidateCode(100,30,4,4);
//存储服务端验证码
request.getSession().setAttribute("serverCode",code.getCode());
System.out.println("ServerCode:"+code.getCode());
//响应客户端
code.write(response.getOutputStream());
}
}
LoginServelt
2、Struts的表单重复提交解决方案
a、使用重定向
b、使用生成令牌配合token拦截器
此种解决方式不太符合逻辑,它是产生了错误之后再告知用户,应该一直停留在当前界面
c、使用生成令牌配合tokensession拦截器