表单重复提交bug
解决办法
第一种情况
只记: 表单向数据库提交信息,必须使用重定向, 不能使用请求转发。【不然由于转发地址栏不会变的原因,会出现F5键重复提交的错误】
req.getContextPath()获取工程路径: http://ip:端口/工程名
resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");
第二、三种情况
其他两种情况的解决办法:验证码
<!-- 验证码jar包 -->
<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
<!--
验证码servlet,已经有第三方kaptcha渣包实现 只需要配置进来就可以了
每次访问这个servlet,都会刷新验证码图片
并且会将答案保存在session中KAPTCHA_SESSION_KEY中
-->
<servlet>
<servlet-name>KaptchaServlet</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>KaptchaServlet</servlet-name>
<url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>
<label>验证码:</label>
<input class="itxt" type="text" id="code" name="code" value="abc"/>
<img id="code_img" src="/bookstore/kaptcha.jpg" />
//验证验证码
HttpSession session = req.getSession();
/**
* 因为每次访问KaptchaServlet就会刷新验证码图片
* 并且会自动将此验证码答案保存进session的KAPTCHA_SESSION_KEY中
*/
//获取验证码答案
String key = (String) session.getAttribute(KAPTCHA_SESSION_KEY);
//获取答案后立即删除 表单重复提交则key会为null
session.removeAttribute(KAPTCHA_SESSION_KEY);
String code = req.getParameter("code");
if (key == null){
System.out.println("please do not submit form repeatedly");
}else if(!key.equalsIgnoreCase(code)) {
System.out.println("code error");
} else {
开始正式注册......
}