struts2之防止表单重复提交

struts.xml配置文件


<?xml version="1.0" encoding="utf-8" ?>
<!doctype struts public
"-//apache software foundation//dtd struts configuration 2.0//en"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<!-- 默认的视图主题 -->
<constant name="struts.ui.theme" value="simple" />

<!-- struts2在防止表单重复提交的拦截中有2个,分别是:token,tokensession。tokensession继承token而来。
通常情况下,使用tokensession客户端感觉会比较友好。 -->
<!-- 如果重复提交,会跳转到error.jsp教程页面 -->
<package name="person" namespace="/test" extends="struts-default">
<action name="token" class="com.ljq.action.personaction">
<interceptor-ref name="defaultstack" />
<interceptor-ref name="token" />
<!-- 如果重复提交,跳转到error.jsp页面 -->
<result name="invalid.token">/web-inf/page/error.jsp</result>
<result>/web-inf/page/message.jsp</result>
</action>
<action name="tokensession" class="com.ljq.action.personaction">
<interceptor-ref name="defaultstack" />
<interceptor-ref name="tokensession" />
<!-- 如果重复提交,不会跳转到error.jsp页面 -->
<result name="invalid.token">/web-inf/page/error.jsp</result>
<result>/web-inf/page/message.jsp</result>
</action>
</package>
</struts>

      

personaction类


package com.ljq.action;

import java.util.arraylist;
import java.util.list;

public class personaction {

private string name;

@suppresswarnings("unchecked")
//观看控制台
//如果token生效则不会在控制台输出name的值,而会输出如下警告: 2011-3-14 20:45:32 com.opensymphony.xwork2.util.logging.commons.commonslogger
//warn 警告: form token edz4s96rndn5vd8b1cqtk6fthijupc66 does not match the session token null.
public string execute() {
list ls = new arraylist();
ls.add(name);
for (int i = 0; i < ls.size(); i++) {
system.out.println(ls.get(i));
}
return "success";
}

public string getname() {
return name;
}

public void setname(string name) {
this.name = name;
}
}

      

index.jsp表单页面


<%@ page language="java" import="java.util.*" pageencoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>

<title>防止表单重复提交</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>

<body>
<!-- 防止表单重复提交,记得在form表单里填上<s:token></s:token> -->
<!-- action="token"、action="tokensession" -->
<s:form action="token" namespace="/test" method="post">
姓名:<s:textfield name="name"/><s:token></s:token>
<input type="submit" value="发送"/>
</s:form>
</body>
</html>

      

message.jsp返回成功页面


<%@ page language="java" import="java.util.*" pageencoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>

<title>my jsp 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>

<body>
<s:property value="name"/><br/>
<%=new date() %>
</body>
</html>

      

error.jsp表单重复提交提示页面


<%@ page language="java" import="java.util.*" pageencoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
string path = request.getcontextpath();
string basepath = request.getscheme()+"://"+request.getservername()+":"+request.getserverport()+path+"/";
%>

<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
<head>
<base href="<%=basepath%>">

<title>my jsp 'error.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<!--
<link rel="stylesheet" type="text/css教程" href="styles.css">
-->

</head>

<body>
您已经提交了表单,请不要重复提交。
</body>
</html>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
配置
struts2表单重复提交、struts表单重复提交、struts防止重复提交、struts2 防止重复提交、防止表单重复提交,以便于您获取更多的相关知识。

时间: 2024-12-24 09:13:50

struts2之防止表单重复提交的相关文章

java Struts2防止表单重复提交代码

先要配置拦截器,拦截器用于控制重复提交内容!其实原理很简单,就是在表单内生成一个序列,判断是否为新的序列,如果是之前的序列,则证明是一个重复提交内容!  代码如下 复制代码 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&q

Sturt2做表单重复提交

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 默认

Struts2防止表单重复提交

最近开发中涉及到了表单重复提次的问题,通过研究做个总结.   防止表单重复提交主要用的到 标签: <s: token /> 拦截器: <interceptor-ref name="token" /> 默认的返回值: <result name="invalid.token">/input.jsp</result>   在页面加载时<s:token />产生一个GUID(Globally Unique Iden

Struts2框架学习之七:避免表单重复提交

前言 防止表单重复提交在web开发中是一个经常遇到的问题,一般来避免重复提交有两种方式:客户端JavaScript代码实现和服务端代码实现.这里主要介绍服务端的实现方式.在服务端实现表单重复提交的基本原理是:通过创建一个Session对象,并产生一个令牌值,将这个令牌值作为隐藏域随表单一起发送给客户端,同时在Session中保存令牌值.在用户提交表单的时候判断提交参数的令牌值与Session中的是否相等,如果相等则清除,不再使用这个令牌值,,然后执行后续的处理:如果两者不相等,表示已经提交过表单

Struts2 &amp;amp;lt;s:token&amp;amp;gt;防止表单重复提交 &amp;amp;nbsp; %{}

token是为了防止表单重复提交,token 原理大致为: 1:显示表单的那个 action 中使用 createToken() 生成一个随机的 token值,并存放在服务端(session或者cache中),并且传递一份到页面中 2:表单页面使用一个隐藏表单域获取后端传过来的 token值,该表单页面提交时会将此 token 值一同提交到后端 3:在表单页面提交到的 actioin 中使用 validateToken() 将服务端与表单隐藏域中的 token 值进行对比,如果服务端存在 tok

一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。

1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xml配置的方式进行表单数据的校验. (3)代码方式验证Action中所有的方法:代码方式验证Action中指定的方法:xml方式验证Action中所有的方法:xml方式验证Action中指定的方法: 2:代码方式验证Action中所有的方法(自己记得导jar包和我配置web.xml文件,自己脑补吧):

一种表单重复提交处理方法

表单重复提交处理: 1. 在生成表单时执行如下:    session.setAttribute("forum_add", "forum_add"); 2. 提交处理时作如下判断         if (isRedo(request, "forum_add")) {            //提示重复提交,作相关处理        } 相关函数:     /**     * 判断是否为重复提交     * 1,检查Session中是否含有指定名字

如何防止表单重复提交

表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. 使用浏览器历史记录重复提交表单. 浏览器重复的HTTP请求. 几种防止表单重复提交的方法 禁掉提交按钮.表单提交后使用Javascript使提交按钮disable.这种方法防止心急的用户多次点击按钮.但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了. 我之前的文章曾说过用一些

用Struts的Token机制解决表单重复提交

Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配.在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换.这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生. 这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求