在Struts中,表单的提交至少涉及两个Struts动作:
第一个负责把表单显示给用户
第二个负责对用户通过表单提交的数据进行处理
我们在第一个表单动作里生成一个Token(标记)并保存在HttpSession对象和表单的Hidden中各保存一份,在第二个动作里,对比Hidden和HttpSession中的值,如果匹配则正常处理,否则,则属于表单重复提交,总体来说思路与验证码类似。
下面是具体实现步骤:
index.jsp
<a href="redirect.do">添加用户</a>RedirectAction.java
public class RedirectAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
this.saveToken(request); // 生成Token
return mapping.findForward("input");
}
}
input.jsp
<html:form action="user.do">
userName:<html:text property="userName"/>
<input type="hidden"
name="<%=Constants.TOKEN_KEY%>"
value="<%=session.getAttribute(Globals.TRANSACTION_TOKEN_KEY)%>"/>
<html:submit value="submit"/>
</html:form>
UserAction.java
public class UserAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// 验证Token
if (!this.isTokenValid(request)) {
return mapping.findForward("error");
}
// 清除Token
this.resetToken(request);
UserForm userForm = (UserForm) form;
// (后面代码与防止表单重复提交无关,不再叙述)
HttpSession session = request.getSession();
Vector userList = (Vector) session.getAttribute("userList");
if (userList == null) {
userList = new Vector();
}
userList.add(userForm.getUserName());
session.setAttribute("userList", userList);
return mapping.findForward("show");
}
}
分享到:
相关推荐
当用户将信息提交到服务器,服务器响应采用forward方式调转到下一个页面后,此时地址栏中显示的是上个页面的URL,若刷新当前页面,浏览器会将再次提交用户先前输入的数据,就会再次出现表单重复提交的问题。...
这里是Struts2 中放置表单重复提交的例子。
struts2防止表单重复提交--重定向
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
【原创】Struts2防止表单重复提交.doc
这个示例简单易懂,就是利用token过滤器
防止表单重复提交 token eclipse项目
struts数据回显、模型驱动、防止表单重复提交
struts2防止重复登录,分享给大家学习一下。
详解struts2的token机制和cookie来防止表单重复提交 今天在做一个投票系统时要实现防止表单重复提交! 当时就想到了用struts2提供的token机制 struts2的token机制防止表单重复提交: 首先需要在提交的jsp页面(要...
SSH笔记-数据验证、上传下载、避免表单重复提交、自定义拦截器
本文档主要记录了struts2的属性驱动和模型驱动的区别,以及防止表单重复提交,另外增加了验证信息的正确位置的显示,希望对你有所帮助!
Struts2知识点总结,包括文件上传,文件下载,防止表单重复提交,Struts2标签,Struts2拦截器
JSP 避免 Form 重复提交的三种方案是指在 Web 应用程序中,用户在提交 Form 后,如何防止用户不小心或恶意地重复提交表单数据,避免对服务器端和数据库造成不必要的负载和影响。下面是三种常见的解决方案: 一、...
传智播客的struts高级实战进阶 MVC模式的回顾 ...防止表单重复提交 使用复选框的技巧 使用下拉列表框的技巧 文件上传 DispatchAction的应用 Validator框架 Struts请求处理过程的源码分析与digester
介绍Struts 2及Struts 2开发环境的搭建 第一个Struts 2应用开发 解决Struts 2配置文件无提示问题 Action名称的搜索顺序 ...使用标签防止表单重复提交 Struts 2+Spring 2.5+Hibernate 3.3整合开发
简单使用struts2,Hibernate 3实现注册模块 另外使用token方式防止表单重复提交 使用hbm2ddl.auto,透过pojo产生数据库表
struts2知识点:处理流程,基本配置,与servlet的API解耦,结果类型,通配符和动态方法的调用,类型转换,文件上传,拦截器,表单验证,国际化,OGNL表达式,UI标签,模型驱动,防止表单重复提交,项目练习知识点:...
这里包含了struts2标签的介绍,介绍了Struts2中OGNLvalueStack和stackContext,radio List的预选问题,文件的上传与下载,防止表单重复提交optiontransferselect字符串拼接,struts2_Path_路径问题