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. 【计算几何】【二分】【随机增量法】hdu6167 Missile Interception

    n个半径为R的圆是否有公共部分,等价于询问是否存在一个半径小于R的圆,能覆盖所有n个圆的圆心. 对这n个点求最小圆覆盖即可.从网上扒了个随机增量法的代码. 这样算上二分,复杂度就是nlogn了. #i ...

  2. win8 wamp 安装报错

    可是安装wamp的时候(http://www.wampserver.com/en/#download-wrapper)下载的是64位的,刚开始报 错xxx.dll文件丢失,好吧我把那个xxx.dll文 ...

  3. [NOIp2017提高组]逛公园

    题目大意: 给你一个有向图,若用dis(u,v)表示从u到v的最短路长度,求从1到n的长度不超过dis(1,n)+k的路径数. 思路: 首先分别预处理出以1,n为起点的单.源最短路. 对于合法的边重构 ...

  4. CentOS 6.9/Ubuntu 16.04源码安装RabbitMQ(二进制包tar.gz)

    说明:CentOS的安装方式同样适合在Ubuntu中,把源改成APT即可. 一.安装erlang: 下载erlang: 从Erlang的官网http://www.erlang.org/download ...

  5. kevinekline----------------- SQLSERVER MVP

    https://twitter.com/kekline http://kevinekline.com/worth-the-wait-why-sql-server-2008-is-great/ http ...

  6. Web API使用记录系列(一)创建API项目与基本配置

    本系列文章主要记录Web API使用过程中的一些个人总结,包括创建API项目.基础配置.ApiTestClient使用与HelpPage页面的优化.Owin与OAuth的使用等. 本节主要内容是API ...

  7. 五、Springboot 之 自定义配置文件及读取配置文件

    说明:建议所有的类应该与spring-boot启动程序同级,不如扫描不到 1.核心配置文件是指在resources根目录下的application.properties或application.yml ...

  8. Wlms进程导致Windows2008R2操作系统关机的解决办法

    2.将wlms进程干掉,将PStooLs工具copy至服务器的C盘根目录下 3.运行psexec.exe -d -i -s regedit.exe 命令 4.打开注册表,找到vlms选项, [HKEY ...

  9. pymongo常见的高级用法

    pymongo是python中基于mongodb数据库开发出来的,比mongoengine要高级一些,也要好用一些. 基本的增删查改就不说了 insert() delete() find() upda ...

  10. unity mipmap 糊

    unity 开miapmap会糊很多 尤其在editor里面 我估计和editor的 tempRT resolution 957x380有关 -----确实是这样 手机上糊的程度低很多 中间rt我用的 ...