我是靠谱客的博主 鲜艳月饼,最近开发中收集的这篇文章主要介绍SSH防止浏览器后退前进、刷新而重新上传表单数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们在进行数据库添加操作的时候,如果允许后退,而正巧有刷新了页面,就会再次执行添加操作,无疑这不是我们需要的。该方法由Q群的达达提供
SSH的处理方法如下:
在Action中的VIEW方法中,需要将Token值明确的要求保存在页面中,只需增加一条语句:saveToken(request);,如下所示:

public ActionForward add(ActionMapping mapping, ActionForm form, 
HttpServletRequest request, HttpServletResponse response)
//前面的处理省略
saveToken(request);
//转发到需要录入信息的页面
return mapping.findForward("add");
}

[b]在Action的SAVE方法中,我们根据表单中的Token值与服务器端的Token值比较,如下所示:[/b]

//处理信息录入的action
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
if (isTokenValid(request, true)) {
// 表单不是重复提交正常执行
} else {
//表单重复提交
saveToken(request);
//给客户端提示错误,当然这里也就是你把ActionMessages保存到request范围内,然后forward到错误页面
}
}



saveToken方法:
创建一个新的令牌,并把它保存在当前session范围内.如果HttpSession不存在,就首先创建一个HttpSession对象.

如何利用上述方法应用令牌机制解决重复提交问题:
以用户注册为例:
在用户请求newUser.jsp之前,首先把请求转发到PrepareAction,PrepareAction 调用saveToken方法,创建一个新的令牌,并将令牌值保存在当前HttpSession中(新创建的),PrepareAction接着把请求转发给newUser.jsp.

newUser.jsp中的<html:form>标签自动判断在session范围内是否存在Token,如果存在,就自动在表单中生成一个包含Token信息的隐藏字段,例如:
<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="....">

在用户提交表单后,由InsertUserAction处理请求.在InsertUserAction中,调用isTokenValid方法,判断当前用户会话中的令牌值和请求参数中的令牌值是否匹配.如果匹配,就调用resetToken方法,删除Token,然后执行插入数据操作,这样当浏览器执行后退时,表单的Token值是和上次一样的,但服务器的Token值已经被删除,所以就会不匹配;如果不匹配,返回相关错误提示,进行相关操作.

也可以参考一下:
[url]http://www.tzwhx.com/newOperate/html/1/11/112/17971.html[/url]
不过我没试过行不

最后

以上就是鲜艳月饼为你收集整理的SSH防止浏览器后退前进、刷新而重新上传表单数据的全部内容,希望文章能够帮你解决SSH防止浏览器后退前进、刷新而重新上传表单数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部