`
zhaosoft
  • 浏览: 183899 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2避免重复提交

阅读更多

struts2避免重复提交

struts2使用拦截器来检查表单是否重复提交,它采用同步令牌的方式来实现对表单重复提交的判断。

首先需要在表单中使用<s:token name="user.token"></s:token>

<s:token>标签创建一个新的令牌值,并用你所指定的令牌名把令牌保存到session中。而这个令牌值是随即产生的经过加密的字符序列,不会重复。

其次需要为action配置TokenInterceptor或者TokenSessionStoreInterceptor拦截器。这两个拦截器都已经在struts-default.xml中定义,但没有包含在defaultStack拦截器栈中。

action中配置拦截器和在重复提交时,将要请求导向的结果视图。

<action name="register" class="com.zhaosoft.action.RegisterAction">

      <!-- 配置异常映射,当RegisterAction抛出Exception异常时,向用户显示error.jsp页面 -->

      <exception-mapping result="error" exception="java.lang.Exception"/>

<result name="invalid.token">/WEB-INF/pages/register.jsp</result>

      <result name="input">/WEB-INF/pages/register.jsp</result>

      <result name="success">/WEB-INF/pages/success.jsp</result>

      <result name="error">/WEB-INF/pages/error.jsp</result>

      <interceptor-ref name="defaultStack">

      <param name="workflow.excludeMethods">default</param>

      </interceptor-ref>

      <interceptor-ref name="token">

         <param name="excludeMethods">default</param>

      </interceptor-ref>

    </action>

注:excludeMethods指定要排除的方法。

register.jsp页面中添加action级别的错误信息显示的标签:<s:actionerror/>

form中添加<s:token>标签:<s:token name="user.token"></s:token>

最好为在资源文件中设置键struts.messages.invalid.token的本地化消息。

struts.messages.invalid.token=您已经提交了表单,请不要重复提交。

TokenSessionStoreInterceptor:使用TokenSessionStoreInterceptor拦截器同样能避免重复提交,TokenSessionStoreInterceptor集成自TokenInterceptor。使用TokenSessionStoreInterceptor将不会输出任何错误信息。如果token无效,请求被导向到invalid.token结果码映射的视图。

配置如下:

<interceptor-ref name="tokenSession">

         <param name="excludeMethods">default</param>

      </interceptor-ref>

分享到:
评论
6 楼 hongshenghome 2009-04-07  
是啊!楼主,表单没提交就返回错误页了!怎么回事啊,安照你的做的啊~!
5 楼 logeed 2008-11-28  
为什么 我的一直返回重复提交时的返回页 所有的与这个action想管的动作都返回错误页 我表单都还没有提交就返回了这个重复提交的错误提示页了
4 楼 大猫汤姆 2008-10-17  
这东西不好。只能防止用户误操作,不能防止恶意提交。使用图片验证比较安全。
3 楼 chq32 2008-10-17  
sech 写道
提交之后自动使提交按钮disabled,不更简单吗?

按F5的话呢?
2 楼 zhaosoft 2008-09-23  
按钮disabled,就不能提交数据了吗?
1 楼 sech 2008-09-22  
提交之后自动使提交按钮disabled,不更简单吗?

相关推荐

    struts2防止表单重复提交--重定向

    struts2防止表单重复提交--重定向

    使用struts的同步令牌避免form的重复提交

    使用struts的同步令牌避免form的重复提交

    struts2中防止重复提交的方法

    在点击"提交"后,我们通常会弹出一个提示信息的页面,用户此时有可能会按f5刷新当前提交的action,从而将多个相同的数据保存到了后台数据库,并且造成了潜在的安全危险! 如何避免重复提交呢?

    刷新action避免重复提交

    防止提交 在用struts2.0标签开发中,经常要使用form提交.在点击"提交"后,我们通常会弹出一个提示信息的页面,用户此时有可能会按f5刷新当前提交的action,从而将多个相同的数据保存到了后台数据库,并且...避免重复提交呢?

    SSH笔记-数据验证、上传下载、避免表单重复提交、自定义拦截器

    SSH笔记-数据验证、上传下载、避免表单重复提交、自定义拦截器

    拦截器防止重复提交的设置步骤

    防止重复提交的拦截器的配置步骤 希望对初学者有所帮助

    Struts1.3 备忘笔记

    09 Struts_09Token : Structs的令牌机制,避免重复提交问题 10 Struts_10SmartUpload : structs的文件上传 11 Struts_11Internationalize : Structs的国际化和消息文件的使用 12 Struts_12GeneralApply : Structs的...

    JAVA WEB典型模块与项目实战大全

    5.5 避免重复提交功能  5.6 缩略加水印图像  5.7 小结  第6章 网络硬盘  6.1 网络硬盘功能原理  6.2 网络硬盘功能具体实现——浏览磁盘和显示文件信息  6.3 网络硬盘功能具体实现——操作文件夹和文件...

    java面试题

    Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的连接。 heap和stack有什么区别? 答:...

    基于关联挖掘的构件检索方法研究及原型系统实现

    软件复用为避免软件开发过程中的重复劳动提供了解决方案,可以提高软件开发的效率和软件的质量,而软件构件技术是实现软件复用的关键技术。构件复用过程中,用户常因对构件描述机制认识有限而难以提出准确的检索需求...

Global site tag (gtag.js) - Google Analytics