struts2之表单重复提交问题

 

概述

 

表单的重复提交:

若刷新表单页面, 再提交表单不算重复提交. 

在不刷新表单页面的前提下: 

多次点击提交按钮

已经提交成功, 按 "回退" 之后, 再点击 "提交按钮".

在控制器响应页面的形式为转发情况下,若已经提交成功, 然后点击 "刷新(F5)“

重复提交的缺点:

加重了服务器的负担

可能导致错误操作. 

 

 

Struts2 解决表单重复提交

 



 

 

标记管理

 

Struts 提供的 token 标签可以用来生成一个独一无二的标记. 这个标签必须嵌套在 form 标签的内部使用, 它将在表单里插入一个隐藏字段并把标记值(隐藏域的字段的值)保存在HttpSession 对象里. 

Token 标签必须与 Token 或 TokenSession 拦截器配合使用, 这两个拦截器都能对标记进行处理. 

Token 拦截器在遇到重复提交情况时, 会返回 invalid.token 结果并加上一个 Action 错误. 这种错误默认的消息是: The form has already been processed or no token was supplied, please try again.

TokenSession 拦截器采取的做法只是阻断后续的提交, 用户将看到同样的响应,但实际上并没有重复提交 

 

示例

 

1. 在表单中添加标签s:token

 

    <s:form name="token" 
            action="token.action" 
            method="POST">
        <s:token></s:token>    
        <s:textfield name="username" label="用户名称"></s:textfield>
        <s:submit value="提交"></s:submit>
    </s:form>

 

2. 在struts.xml中为表单result添加token或者tokenSession拦截器,两者使用一个即可,不能同时使用

 

2.1 添加token拦截器

 

    <package name="token" namespace="/" extends="struts-default">
        <action name="token" class="org.rabbitx.web.struts2.token.action.TokenAction">
            <interceptor-ref name="token"></interceptor-ref>
	    <interceptor-ref name="defaultStack"></interceptor-ref>
		<result>/success.jsp</result>
		<result name="invalid.token">/token/token-error.jsp</result>
		<result>/token/success.jsp</result>
        </action>
    </package>

 

 2.2 添加tokensession拦截器

 

    <package name="token" namespace="/" extends="struts-default">
        <action name="token" class="org.rabbitx.web.struts2.token.action.TokenAction">
        	<interceptor-ref name="tokenSession"></interceptor-ref>
		<interceptor-ref name="defaultStack"></interceptor-ref>
		<result>/success.jsp</result>
		<result>/token/success.jsp</result>
	</action>
    </package>

 

 3. 定制错误提示信息

 

3.1 在struts2-core-2.3.15.3.jar的org.apache.struts2路径下文件struts-messages.properties中可以找到系统的预定义提示信息

 

struts.messages.invalid.token=The form has already been processed or no token was supplied, please try again.
struts.internal.invalid.token=Form token {0} does not match the session token {1}.

 

3.2 复制上面的信息到国际化资源文件中既可进行定制 

 

小结

 

3. 表单的重复提交问题

 

1). 什么是表单的重复提交

 

> 在不刷新表单页面的前提下: 

>> 多次点击提交按钮

>> 已经提交成功, 按 "回退" 之后, 再点击 "提交按钮".

>> 在控制器响应页面的形式为转发情况下,若已经提交成功, 然后点击 "刷新(F5)"

 

> 注意:

>> 若刷新表单页面, 再提交表单不算重复提交

>> 若使用的是 redirect 的响应类型, 已经提交成功后, 再点击 "刷新", 不是表单的重复提交

 

2). 表单重复提交的危害:  

 

3). Struts2 解决表单的重复提交问题:

 

I. 在 s:form 中添加 s:token 子标签

 

> 生成一个隐藏域

> 在 session 添加一个属性值

> 隐藏域的值和 session 的属性值是一致的. 

 

II. 使用 Token 或 TokenSession 拦截器. 

 

> 这两个拦截器均不在默认的拦截器栈中, 所以需要手工配置一下

> 若使用 Token 拦截器, 则需要配置一个 token.valid 的 result

> 若使用 TokenSession 拦截器, 则不需要配置任何其它的 result

 

III. Token VS TokenSession

 

> 都是解决表单重复提交问题的

> 使用 token 拦截器会转到 token.valid 这个 result

> 使用 tokenSession 拦截器则还会响应那个目标页面, 但不会执行 tokenSession 的后续拦截器. 就像什么都没发生过一样!

 

IV. 可以使用 s:actionerror 标签来显示重复提交的错误消息. 

该错误消息可以在国际化资源文件中覆盖. 该消息可以在 struts-messages.properties 文件中找到

 

struts.messages.invalid.token=^^The form has already been processed or no token was supplied, please try again.

14自由度汽车动力学模型 多体系统分解簧上质量刚体:包含车身主体,具有6个自由度(x/y/z平移 + 俯仰/侧倾/横摆旋转)四个簧下质量刚体:每个车轮独立建模,含垂直跳动(z向)和旋转(绕z轴)自由度总自由度:6(车身) + 4×2(车轮) = 14自由度。 阅读详情

相关推荐

计算机组成原理汉字编码与校验设计实验报告(汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码)

这次实验利用logisim进行设计,进行了以下这四个实验,其中分为汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码,实验报告分为四个部分,在这四个部分中依次对四个实验的方案设计,设计思路进行了介绍

zhang2gongzi的博客 6万+

struts2表单重复提交问题

struts2重复提交     我们先来说一下什么是重复提交:所谓重复提交,就是用户在页面多次点击提交按钮,或者通过不断刷新页面,把已经提交过的数据多次向后台提交。     重复提交对于查询类的功能,问题还不是太大,但是对于新增或是修改类的功能,就有可能凭空的出现很多同样信息的重复数据,从而导致业务功能出现错误。  一、造成重复提交主要的两个原因:    在我们平时的开发过

悲欢自饮随遇而安的博客 634

ADB详细(从下载安装到灵活运用)

ADB(Android Debug Bridge)是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载ADB Kits。

LiuYong_01的博客 10万+

Struts2_表单重复提交问题

表单重复提交 概述 表单的重复提交: --在不刷新表单页面的前提下:     多次点击提交按钮     已经提交成功,按“回退”之后,再点击“提交”按钮     在控制器响应页面的形式为转发情况下,若已经提交成功,然后点击“刷新(F5)" 注意: --若刷新表单页面,再提交表单不算重复提交 --若使用的是redirect的响应类型,已经提交成功后,再点击"刷新",不是表单的重

两岸猿_吴轻舟先生的博客 673

别再硬编码了!WinCC子画面动态加载的5种C脚本写法对比

本文深入解析WinCC子画面动态加载的5种C脚本实现方案,包括基础加载、路径动态解析、多语言切换、窗口自适应布局和混合架构交互。通过代码示例和场景分析,帮助开发者避免硬编码问题,提升工业自动化系统的交互效率和可维护性。特别推荐路径动态解析方案,有效解决项目路径管理的痛点。

weixin_29008691的博客 475

C/C++炫酷烟花①(完整代码)

C/C++实现炫酷烟花动画的完整代码。

AIGC 2万+

Struts2防止页面刷新重复提交

重复提交的原因是,Struts2默认为转发,所以为了防止这个问题需要在重新提交的时候让请求重定向,因此需要再result标签中指明为重定向。 adv_findAdvList name:为调用特定的方法返回的字符串的名称"addSuccess" type: 标签中的adv_findAdvList表示的是:重定向是请求的是 adv action中的findAdvList的方法...

iteye_10306的博客 179

28、时间敏感网络中可靠性感知的综合路由与调度

本文针对时间敏感网络(TSN)中现有路由与调度机制主要关注时间触发(TT)流量而忽略其他类型流量效用的问题,提出了一种可靠性感知的综合路由与调度机制。通过将具有不同可靠性和延迟要求的各类流量的联合路由与调度问题形式化为基于优化模理论(OMT)的混合整数规划问题,设计了完整的路由约束与调度约束,并分析了不同类型流量的传输效用,设定了优化目标以提升整体网络性能。实验结果表明,该机制在满足TT流量严格时延与可靠性要求的同时,显著提高了AVB和BE等非关键流量的传输效用,实现了多类型流量的高效协同传输。

hhh00的博客 94

Struts2实现避免表单重复提交

在平时的开发过程中,经常可以遇到表单重复提交的问题,如做一个注册页面,如果表单重复提交,那么一个用户就会注册多次。首先来看看引起表单重复提交的原因。 在页面跳转的时候,有两种类型,请求转发和重定向 所谓请求转发是在服务器端进行跳转,对用户是透明的,此时浏览器中的地址不会发生改变 重定向是在客户端发生跳转,跳转时候浏览器中的地址栏会发生改变 如果我们在注册时,使用了请求转发,那么当我们刷新页

Android学习之旅 1476

2025年GESP3月认证C++五级真题解析

小 A 有 2n 件物品,小 B 和小 C 想从小 A 手上买走这些物品。对于第 i 件物品,小 B 会以 bi 的价格购买,而小 C 会以 ci 的价格购买。对于所有测试点,保证 1 <= T <= 100, 2 <= g < p <= 10^9, g, p 为整数, p 为质数。对于所有测试点,保证 1 <= n <= 10^5, 0 <= bi, ci <= 10^9, bi, ci 为整数。对于另外 50 % 的测试点,保证 n <= 100000, 0 <= bi, ci <= 10^9。

lan_in的博客 1033

编织数据的实时脉络——构建基于MySQL的数据编织平台,实现实时数据治理

除了上述基本设置外,我们还可以根据实际应用场景自定义一些特定的监控项目。例如,对于某些高并发读写的表,可能需要特别关注它们的锁等待时间和回滚段使用率;而对于涉及到跨库关联查询的操作,则应当着重检查网络延迟及缓存命中率等因素。-- 获取InnoDB行级锁等待情况-- 统计各表的缓存命中率这段SQL脚本不仅展示了如何查询InnoDB引擎下的锁争用状况,还介绍了计算表级别缓存命中率的方法,有助于深入理解系统的运行状态。

墨夶的博客 1789

struts2表单重复提交拦截器token的使用问题解决

在学习struts2拦截器token的时候,一直无法显示token的jsp页面。代码如下: struts2.xml文件: <package name="default" namespace="/" extends="struts-default"> <action name="login" class="com.hf.action.UserAction" method="lo...

weixin_40105633的博客 242

YOLOv11增量学习数据回放优化:解决新类别引入时的灾难性遗忘问题

本文提出了一种基于生成式潜在回放和提示学习的YOLOv11增量学习系统,旨在解决目标检测中的灾难性遗忘问题。系统采用改进的YOLOv11骨干网络,结合条件变分自编码器生成旧类别特征,并通过渐进式提示调优模块实现高效参数更新。关键技术包括:1) C3k2模块和C2PSA注意力增强特征提取;2) CLIP引导的VAE潜在空间数据回放;3) 类特定与超类别提示相结合的增量调优策略;4) 自适应特征金字塔与显式视觉中心融合机制。实验表明,该方法在保持原有检测性能的同时,显著降低了增量学习过程中的遗忘现象。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 2096

如何解决Struts2表单的重复提交问题

需要解决一个如下的问题: Struts2项目中有个评论的模块,表单与显示的东东在同一页面,提交表单后刷新浏览器后,数据被重新提交,如何解决

iteye_11995的博客 89

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Struts2解决表单重复提交的问题

一 什么是表单的重复提交  1 多次点击提交按钮  2 表单

lvliqiang2012的专栏 654

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

struts2中form只提交数据不跳转引发的刷新后重复提交表单中数据的问题

昨天网上搜索终于找到了一个让form和ajax一样不跳转的方法,但今天测试发现...结果并不像我想象的那般美好... 当form表单中的数据提交之后,因为页面没有被定义为重定向...所以按下F12,点开netWork,你会发现当前的页面中竟然还有Form Date 就上图这种情况,只要点一下F5,这个Form Data中的几个数据就自动提交了...太坑爹,网上搜索了下,好多篇博客都有提

过客的博客 1914

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

struts2防止表单重复提交问题

现在想起来这个问题还是挺恶心的,为了不让大家再有同样的痛苦,故写成BLOG来分享。首先介意大家能用AJAX提交就从项目开始用AJAX的方法提交。当然我现在介绍的不是用AJAX方法,我就是用的普通struts2方法,现在看来非常简单,由以下几步组成:一:在将要提交页面上加它的作用是在每次生成页面生成一个唯一的信息令牌,也就是默认的拦截器能识别出来的;二:在struts.xml

JAVA学习专用BLOG 1714

44. Struts2_表单的重复提交问题

主要笔记: 表单的重复提交问题 1). 什么是表单的重复提交> 在不刷新表单页面的前提下: >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" 之后, 再点击 "提交按钮". >> 在控制器响应页面的形式为转发情况下,若已经提交成功, 然后点击 "刷新(F5)"> 注意: >> 若刷新表单页面, 再提交表单不算重复提交 >> 若使用的是 redire

y41992910的博客 322

Struts2-弹出窗口Session丢失、防止表单重复提交问题

一、弹出窗口Session丢失问题 弹出窗口Session丢失使用window.showModalDialog进行信息的提示,相当方便,也容易控制外观和布局。但是存在一个严重的问题,就是Session丢失。当在A页面进行showModalDialog时,弹出的模态窗口open新页面或new dialog()时,会得不到A页面中的Session,这样就严重地限制了他的使用范围。进一步的使用模式窗口...

liberty12345678的专栏 340

struts2中表单重复提交的问题

看了网上说的有关struts2不重复刷新有很多,基本上都是在同一个页面中可以,那么我说下在一个页面中有一个按钮当点击后,到另一个页面。这个页面有许多列表记录,点击保存后再一次跳转到上一次页面中。那么在当前页面点击右键刷新,问题就在这了。 以前的 html: struts.xml: /topic/manage_topic.jsp /c...

p_x1984的专栏 166

struts2 配置token防止表单重复提交的问题

我遇到的问题里为了防上表单的增加数据和修改数据操作重复提交表单,在struts2中中使用,Action的配置name使用通配符如:;employeeAction.java中有add,update,delect;select等方法,而我只想token使用在当匹配add和update操作时,该如何配才正确。因为我以下配置拦截的却是所有匹配了"manage_*"都转到了: employeeadd.js...

wumingjk2009的专栏 79

【转】Struts2解决表单重复提交问题

用户重复提交表单在某些场合将会造成非常严重的后果。例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次。因此,重复提交表单会对你的系统带来逻辑影响,必须采取一些措施防止这类情况的发生。   用户重复提交同一个HTML表单的原因有: 一、快速多次点击了提交按钮;二、提交表单后按下浏览器的刷新按钮。 设置Str...

weixin_30248399的博客 109

Struts2 - 表单的重复提交问题

用户重复提交表单在某些场合将会造成非常严重的后果。例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次。因此,重复提交表单会对你的系统带来逻辑影响,必须采取一些措施防止这类情况的发生。   用户重复提交同一个HTML表单的原因有: 一、快速多次点击了提交按钮;二、提交表单后按下浏览器的刷新按钮。 设置St...

weixin_30244889的博客 107

Struts2文件上传下载和表单重复提交问题

Struts2文件上传下载和表单重复提交问题 文件上传: jsp: pageEncoding="UTF-8"%> Insert title here action: package com.hz.action; import java.io.File; imp

Accelerator 484
上一篇: struts2之文件下载
下一篇: struts2之自定义拦截器
「已注销」
博客等级 码龄12年 7粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值