Struts2利用token和tokenSession拦截器防止重复提交

  有时候网络响应慢,用户可能会再次点击提交按钮,或者在保存页面refresh 也会造成重复提交,这样会造成数据库中有多条相同的数据;

我们当然可以利用js来控制,但是如果浏览器禁用了JS,那就不能控制了。

  Struts2中设计了token和tokenSession拦截器来拦截重复提交:

  jsp页面:

1 <@ taglib prefix="s" uri="/struts-tags" />
2
3 <s:form action="testToken" namespace="/" method="post">
4     <s:token></s:token><!--表单中插入token标签-->
5     <s:textfield name="userName" label="Username"/>
6     <s:submit></s:submit>
7 </s:form>

  struts.xml配置:

<action ="testToken" class="com.test.UserAction">
        <interceptor-ref name="defaultStack"></interceptor-ref>
           <interceptor-ref name="token"></interceptor-ref>
        <result>/success.jsp</result>
        <result name="invalid.token">/error.jsp?message=重复提交         </result><!--配置name为invalid.token的result 重复提交时跳转到此页面--->
</action>    

  Action.java:

 1 public class UserAction extends ActionSupport{//一定要继承ActionSupport
 2            private String userName;
 3            public void execute(){
 4                 return "success";
 5             }
 6            public void setUserName(String userName) {
 7              this.userName = userName;
 8           }
 9          public String getUserName() {
10             return userName;
11           }
12 }

  如果利用tokenSession,重复提交时将不会跳转

  配置只需把xml文件中token改为tokenSession 并且去掉invalid.token的result即可

时间: 2024-10-10 09:39:07

Struts2利用token和tokenSession拦截器防止重复提交的相关文章

Struts2_使用token拦截器控制重复提交(很少用)

控制重复提交的方式:1.表单提交后页面重定向:2.Struts2.x token拦截器 大致流程: 例子: index.jsp 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <% 4 String path = request.getContextPath(); 5 String baseP

Struts2重新学习之自定义拦截器(判断用户是否是登录状态)

拦截器 一:1:概念:Interceptor拦截器类似于我们学习过的过滤器,是可以再action执行前后执行的代码.是web开发时,常用的技术.比如,权限控制,日志记录. 2:多个拦截器Interceptor连在一起组成了Interceptor栈.拦截器是AOP面向切面编程的一种实现,具有热插拔的效应. 3:Struts2拦截器,每个拦截器类只有一个对象实例,即采用了单利模式.所有引用这个拦截器的action都共享着一拦截器类的实例. 拦截器和过滤器的区别 1:拦截器和过滤器的概念非常类似 2:

[原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

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

Struts2学习第4天--拦截器

第1章     Struts2_day04笔记 1.1      上次课内容回顾 l  OGNL表达式 n  OGNL的概述 u  OGNL:对象图导航语言,是一门功能强大的表达式语言. n  OGNL的功能 u  调用对象的方法 u  调用对象的静态方法 u  表达式串联 u  访问ActionContext和OgnlContext数据 n  OGNL独立的表达式: u  Java环境下入门 u  Struts2环境下入门 l  值栈 n  值栈的概述 u  ValueStack:是一个接口,

struts2进阶【6】——拦截器

小解拦截器 可以说,"拦截器"是Struts2的重点内容.见名知义,拦截器的作用主要就是拦截东西,拦截什么呢?当然是'action'了,在执行'action'之前 拦截器会起作用,执行一些预先处理的代码,接着去执行action中相关的方法,之后,流程又会回到拦截器里面,接着去执行后续的一些操作. 在这里还要提两点: 1. Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack).Struts2拦截器栈就是将拦截器按一定的顺序联结成

struts2复习(五)拦截器总结

1. 拦截器(Interceptor): 拦截器是Struts2的核心,Struts2的众多功能都是通过拦截器来实现的. 2. 拦截器的配置 1)编写实现Interceptor 接口的类. 2)在struts.xml文件里定义拦截器. 3)在action中使用拦截器 3. 一旦定义了自己的拦截器,将其配置到action上后,我们须要在action的最后加上默认的拦截器栈:defaultStack. 4. 定义拦截器时能够直接继承AbstractInterceptor抽象类(该类实现了Interc

struts2 学习(五) ----- 文字过滤拦截器

struts2 的文字过滤拦截器 1.新建一个news.jsp页面 然后,新建一个newsSuccess.jsp页面, 2.新建一个class,名为:TextAction.java 3.修改struts.xml的配置: 然后就可以初步传递数据了. 加上下面这句代码就可以防止传递中文字符时发生乱码现象: 4.下面创建拦截器,新建一个class,名为TextInterceptor.java 注意,新建的时候需要继承AbstractInterceptor. 然后,在struts.xml修改一下配置:

Struts2学习第三天——拦截器与文件传输

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.15 lutianfei none 内容摘要: 1.国际化(了解) 2.拦截器(Interceptor)-重点 3.struts2文件上传与下载(次重点) 4.ognl与valuestack 国际化 国际化原理,什么是国际化 ? 同一款软件 可以为不同用户,提供不同语言界面 -- 国际化软件 需要一个语言资源包(很多properties文件,每个properties文件 针对一个国家或者语言 ,通过java程序根

Struts2学习:interceptor(拦截器)的使用

对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组件,以达到易维护.提高代码重用率的目的.struts默认的interceptor有很多,就不去一一列举,这里从自定义拦截器开始学习. 1.定义一个自定义拦截器: package com.owlforest.home.interceptor; import com.opensymphony.xwork