栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JavaWeb】jsp页面中表单重复提交的三种情况

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JavaWeb】jsp页面中表单重复提交的三种情况

情况一

如通过regist.jsp页面提交用户名和密码申请注册,若注册成功,则将用户数据保存到数据库,并通过请求转发跳转到success.jsp页面。

此时在跳转后按F5刷新当前页面,则数据库会多次添加重复记录。原因是因为请求转发其本质是一次请求,而F5会导致浏览器重复提交最后一次请求,即向Servlet请求注册。

情况二

用户正常提交表单,但由于网络原因迟迟没有收到响应,因此用户多次点击提交。

情况三

用户正常提交表单,服务器正常响应,但是提交完成后,用户回退浏览器重新提交。

解决方案

对于情况一来说,通过在Servlet程序中将请求转发改为请求重定向即可解决。

对于情况二、情况三来说,通过验证码解决。服务端的jsp页面会随机生成一个验证码,并将其保存在Session域中。第一次提交表单时Servlet程序会取出验证码与发来的请求作比较并删除,此时验证码相同,允许操作。后来提交表单会因为服务端的验证码变成了null,而导致验证码与请求中的验证码不一致,使得操作被阻止。

Kaptcha

可以通过谷歌Kaptcha完成验证码功能,下载链接在文章末尾。

使用步骤:

1.导入jar包;

2.在web.xml配置用于生成验证码的Servlet程序,注意这个Servlet程序在jar包中已经写好了;

3.在表单中通过img标签显示验证码图片并使用;

4.服务端获取验证码与客户端发来的验证码作比较去使用。

protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//获取并删除Session域中的验证码
	String token = (String)request.getSession().getAttribute(KAPTCHA_SESSION_KEY);//key可以在Kaptcha的Constants文件夹找到
	request.getSession().removeAttribute(KAPTCHA_SESSION_KEY);
	//获取客户端发来的验证码
	String code = request.getParameter("code");
	//获取用户名
	String username = request.getParameter("username");
	//比较
	if (token != null && token.equalsIsIgnoreCase(code)) {
		//保存到数据库
	} else {
		System.out.println("请不要重复提交");
	}
}
下载链接

Kaptcha下载链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571505.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号