1. 什么是表单的重复提交? 前提: 在控制器中相应页面的形式为页面的转发而不是重定向.
1). 若刷新表单页面后, 再提交表单不算重复提交. 除此之外都算为表单的重复提交.
2). 在不刷新表单页面的前提下:
①. 多次点击提交按钮
②. 已经提交成功, 然后点击 "刷新(F5)"
③. 已经提交成功, 按 "回退" 之后, 再点击 "提交按钮".
2. 重复提交由什么缺点:
1). 加重了服务器的负担.
2). 可能导致错误操作.
3. 解决方案:
1). 在页面上使用 js --> 禁止多次点击 "提交按钮". 可以解决 ①
2).利用 session 解决服务器端的重复提交问题.
①. 不能使用 request 解决重复提交, 因为当前页面刷新以后 request 生命周期结束, 不能把 request 中的属性带到 Action 中.
②. 具体步骤:
-->页面上, 在 session 中放置一个Token
<%
org.apache.struts.util.TokenProcessor.getInstance().saveToken(request);
%>
-->在 action 中检验该属性是否存在, 若存在(说明是第一次请求) 清除该属性, 受理请求
->若在 action 中该属性是不存在, 说明该属性已被清除, 拒绝请求.
if(TokenProcessor.getInstance().isTokenValid(request)){
TokenProcessor.getInstance().resetToken(request);
}else{
// 表单重复提交 ,拒绝请求。
}
// 正常请求
此贴为javaeye中朋友的贴,经本人验证的确有效,现本人把自己在项目中遇到过的此类问题的代码及其相关文件说明上传到此,希望能帮助更多的朋友轻松解决此问题
分享到:
相关推荐
Struts1.x与Struts2.x是两种非常流行的Java Web应用程序框架,它们都由Apache软件基金会开发,旨在简化MVC(Model-View-Controller)架构的实现。然而,两者在设计哲学、功能特性以及实现方式上存在显著差异。以下是...
8. **Exception Handling**:Struts1.x提供了异常处理机制,通过配置struts-config.xml中的全局异常映射,可以捕获并处理运行时异常,提高系统的健壮性。 9. **Plug-in架构**:Struts1.x具有强大的插件扩展能力,...
在Struts1.x中,Action直接依赖于Servlet API,这意味着在编写Action时,开发者需要直接处理HttpServletRequest和HttpServletResponse对象。而在Struts2.x中,Action不需要直接处理这些Servlet API的对象,取而代之...
- **第一个程序**:创建一个简单的 Struts1.x 项目,包含基本的 JSP 页面、Action 类和配置文件,实现用户提交表单数据的功能。 - **示例步骤**: 1. 创建一个新的 Web 项目。 2. 配置 Struts1.x 的依赖库。 3. ...
Struts1.x是一款经典的Java Web开发框架,由Apache软件基金会维护,主要用于构建MVC(Model-View-Controller)架构的应用程序。本系列教程是针对初学者的全面指导,旨在帮助学习者快速掌握Struts1.x的核心概念和使用...
然而,随着时间的推移,Struts 1.x 因为其局限性和安全问题,逐渐被Struts 2 和其他现代框架如Spring MVC、Play Framework等取代。尽管如此,了解 Struts 1.x 的基础知识对于理解Java Web开发的历史和演变仍然非常有...
Struts1.x是一个经典的Java Web开发框架,它遵循Model-View-Controller(MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用程序。在这个"Struts1.x_Project.zip"压缩包中,我们可以看到一个使用Struts1.x...
然而,需要注意的是,Struts1.x已经较为过时,现代的Web开发更多地转向了Spring MVC、Play Framework或AngularJS等更现代的解决方案。尽管如此,理解Struts1.x可以帮助我们了解Web框架的发展历程,以及MVC模式在实际...
【Struts1.x入门教程】 Struts1.x是Apache Jakarta项目的一个重要组成部分,它是一个用于构建企业级Web应用程序的开源MVC框架。该框架的主要目标是简化JavaServer Pages(JSP)、Servlet和标签库的使用,同时提升...
然而,尽管Struts1.x在当时具有广泛的应用,但它也有一些限制和已知的安全问题,比如著名的XSS和CSRF漏洞。随着技术的发展,Struts2作为其后继者,引入了更多的功能和改进,例如更强大的表达式语言和拦截器机制。 ...
Struts1.x是一个经典的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在国际化(i18n)方面,Struts1提供了强大的支持,使得应用程序可以适应不同语言和地区的用户需求。以下是关于Struts1.x国际化...
Struts 1.x 是一个经典的Java Web开发框架,由Apache软件基金会开发,它极大地简化了MVC(模型-视图-控制器)架构的实现。如果你正在寻找如何搭建Struts 1.x的开发环境,以下是一些关键的知识点,以及这些指定的jar...
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
Struts 2.x权威指南(第3版)
**Struts2.x与Struts1.x对比**:相较于Struts1.x,Struts2.x具有更多的优势,如不再强制要求ActionForm,配置文件更简洁,处理流程更加清晰。具体而言,请求首先被过滤器捕获,然后根据`struts.xml`文件的配置调用...
Struts 1.x 是Apache软件基金会Jakarta项目的一部分,是一个基于MVC(模型-视图-控制器)设计模式的Web应用框架。它使用Java Servlet和JavaServer Pages技术实现,旨在简化基于Java EE的Web应用程序的开发。 本教程...
学习Struts1.x时,你需要熟悉上述概念并掌握它们之间的交互方式。通过阅读提供的"Struts中文帮助.CHM"文件,你可以深入理解每个组件的工作原理,学习如何配置struts-config.xml文件,以及如何编写Action、ActionForm...
Struts1.x、Hibernate 和 MySQL 是构建Web应用程序的三个关键组件,它们在电子商务系统中扮演着重要的角色。这里我们将深入探讨这些技术以及如何在在线购物车系统中整合它们。 **Struts1.x** 是一个开源的Java框架...
Struts1.x是Apache软件基金会开发的一个开源框架,主要用于构建基于Java的企业级Web应用程序。它在MVC(Model-View-Controller)设计模式的基础上提供了一种实现方式,使得开发者能够更方便地处理业务逻辑、视图展示...
- 在Struts1.x中,需要捕获JDBC操作中的SQLException,并转换为Struts的ApplicationException或自定义异常,以便在ActionForward中控制错误页面的显示。 6. **性能优化**: - 使用PreparedStatement预编译SQL,...