1、在表单中加入<s:token/>标签

2、在动作类中加入token的拦截器

 <!--如果单单写 name="token" 会丧失 defaultStack 拦截器提供的 那些功能, 默认是 defaultStack 提供的那些功能

但是一写其他拦截器,所以它也要加上-->

<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
3、增加一个名称为invalid.token的结果视图

<!--实际上用到了token的拦截器, 拦截器返回值就是 invalid.token字符串,通过源码可以看到-->

<result name="invalid.token">/success.jsp</result>

global-results定义全局结果处理

jsp页面中

     <s:form action="token" namespace="/" >
<s:token></s:token>
<s:textfield label="姓名" name="userName"/> 姓名
<br/>
<s:textfield label="年龄" name="age"/> 年龄
<br/>
<s:textfield label="密码" name="password"/>密码
<br/>
<s:textfield name="birthday"/>生日
<br/>
<s:submit value="提交" />
</s:form>

struts.xml中

 <constant name="struts.devMode" value="true" />
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<constant name="struts.custom.i18n.resources" value="itcast"></constant>     <!--只要继承了mypackage的 默认 都有个 返回结果 name="error"的,在token那个action那里就不用写 name="error" 结果处理了-->
<package name="mypackage" extends="struts-default">
<global-results>
<result name="error">/error.jsp</result>
</global-results>
</package>
<package name="token" extends="mypackage">
<action name="token" class="cn.itcast.action.PersonAction">
      <!--如果单单写 name="token" 会丧失 defaultStack 拦截器提供的 那些功能, 默认是 defaultStack 提供的那些功能
        但是一写其他拦截器,所以它也要加上-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
      <!--实际上用到了token的拦截器, 拦截器返回值就是 invalid.token字符串,通过源码可以看到-->
<result name="invalid.token">/token.jsp</result>  <!--无效的时候返回的页面 一般返回到success.jsp就可以了-->
<result name="success">/success.jsp</result>
<result name="input">/submit.jsp</result>
</action>
</package>
</struts>

类中的提交之后 试试打印userName字段,重复刷新时页面会转到/token.jsp页面

为了让interceptor-ref name=""只写一句就引用了

         <interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref> 参考 http://www.cnblogs.com/friends-wf/p/3766425.html
  <package name="mydefault" extends="struts-default">
<interceptors>
<interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
<interceptor-stack name="mydefaultstack">            <!-- 集总定义的栈内容 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="permissionInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
<package name="user" namespace="/user" extends="mydefault">
<action name="login" class="cn.itcast.domain.User" method="login">  <!--用于处理 login.jsp 中提交的表单,登录的请求-->
<result name="success">/</result>
<result name="login">/login.jsp</result>
</action>
<action name="user_*" class="cn.itcast.domain.User" method="{1}">
<interceptor-ref name="mydefaultstack"></interceptor-ref>      <!--拦截器 引用-->

Struts2中防止表单重复提交,global-results定义全局结果处理的更多相关文章

  1. Struts2中解决表单重复提交

    3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下:  >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" ...

  2. 【Struts2】防止表单重复提交

    一.概述 二.Struts2中解决方案 三.实现步骤 一.概述 regist.jsp----->RegistServlet 表单重复提交 危害: 刷票. 重复注册.带来服务器访问压力(拒绝服务) ...

  3. struts2之防止表单重复提交

    struts.xml配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  4. struts2的防止表单重复提交

    防止表单重复提交其实就是struts2的一个拦截器的使用: struts.xml配置文件: <?xml version="1.0" encoding="UTF-8& ...

  5. 使用js控制表单重复提交(1加锁,2事件方式,3 EasyUI中解决表单重复提交)

    方法一. var flag = true; $(function() { $("#interested").click(function() { beInterested(); } ...

  6. [原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. struts2 token 防止表单重复提交

    1.jsp页面  输入框,提交按钮 <%@ page language="java" contentType="text/html" pageEncodi ...

  8. Java中避免表单重复提交

    表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交 造成的根本原因: 没有完整的进行一次,先请求表单页面->再提交表单过程. 造成重复提交的现象: 由于服 ...

  9. Struts(二十七):使用token或tokenSession防止表单重复提交

    什么是表单重复提交 表单重复提交包括以下几种情况: 前提:不刷新表单页面 1.多次点击“提交”按钮后,重复提交了多次: 2.已经提交成功之后,按“回退”按钮之后,在点击“提交”按钮后,提交成功: 3. ...

随机推荐

  1. 【思维】Stacks of Flapjacks

    [UVa120] Stacks of Flapjacks 算法入门经典第8章8-1 (P236) 题目大意:有一个序列,可以翻转[1,k],构造一种方案使得序列升序排列. 试题分析:从插入排序即可找到 ...

  2. python基础--接口与归一化设计、封装、异常、网络编程

    1 接口与归一化设计 1.1 归一化概念: 归一化的好处: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大降低了使用者的使用难度. 2.归一化使得高层的外部 ...

  3. JVM 参数配置及详解 -Xms -Xmx -Xmn -Xss 调优总结

    堆大小设置 JVM 中最大堆大小有三方面限制: ①.相关操作系统的数据模型(32-bt还是64-bit)限制; ②.系统的可用虚拟内存限制; ③.系统的可用物理内存限制. 32位系统 下,一般限制在1 ...

  4. 使用idea搭建Spring boot开发初始环境

    准备工作 将以下代码加入idea的live template,命名为springbootStartup <parent> <groupId>org.springframewor ...

  5. Ubuntu 16.04重启Nautilus

    关闭: nautilus -q 启动: 不要在命令行启动,直接在Dash中找到“文件”,然后启动,这样就可以在后台直接运行.

  6. NServiceBus入门:多个endpoint(Introduction to NServiceBus: Multiple endpoints)

    原文地址:https://docs.particular.net/tutorials/intro-to-nservicebus/3-multiple-endpoints/ 侵删. 目前为止,我们只是在 ...

  7. 【maven】maven项目移除Maven Dependencies后如何再添加进去

    比较着急这几天弄一个项目,所以匆忙间把maven项目的Maven Dependencies给remove掉了 如下图: 这下可好,整个项目报错了 解决方法: 对比了有Maven Dependencie ...

  8. IntelliJ IDEA的几种常见的快捷键

    在编写代码的时候直接输入psv就会看到一个psvm的提示,此时点击tab键一个main方法就写好了. psvm 也就是public static void main的首字母. 依次还有在方法体内键入f ...

  9. lykchat信息发送系统

    lykchat信息发送系统是Python3开发的,通过模拟微信网页端,基于个人微信号,为系统管理人员提供信息发送工具. 实现的功能有用户登录管理.微信登陆管理和微信信息发送功能. 代码地址:https ...

  10. Ceph源码解析:CRUSH算法

    1.简介 随着大规模分布式存储系统(PB级的数据和成百上千台存储设备)的出现.这些系统必须平衡的分布数据和负载(提高资源利用率),最大化系统的性能,并要处理系统的扩展和硬件失效.ceph设计了CRUS ...