`

struts2第二回:防止重复提交

    博客分类:
  • J2EE
阅读更多
基本原理:用户访问做了重复提交的页面,服务器会生成一个令牌,这个令牌一方面以隐藏字段的方式存于页面上。另一方面保存与session中,当用户第一次提交信息时,服务端会拿页面上得同session里的作对比,相同则通过,并清空session中的值。
这样,当第二次提交该页面时,页面上得值与session中的就不一样了,这样便会返回input,提示重复提交了。
========下面是token.jsp代码==========
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>struts2防止重复提交</title>

</head>
<body>
<s:actionerror cssStyle="color:red" /> <!--重复提交的提示信息-->   
<s:form action="doToken.action">
<s:textfield name="userName" ></s:textfield><br/>
<s:token /> <!--保存本次token信息-->   
<s:submit></s:submit>
</s:form>
</body>
</html>

========下面是struts.xml代码==========
		<!--struts2防止重复提交:拦截器是action级别的,一旦配置该action下得所有请求都会经过此过滤器 -->
		<action name="doToken" class="com.TokenTestAction" method="doToken">
			<result name="invalid.token">/token.jsp</result>
			<interceptor-ref name="defaultStack" /><!--如果自己加入了其他拦截器,则必须手动添加此拦截器,否则在action中会取不到表单的值-->
			<interceptor-ref name="token"/>
		</action>


========下面是TokenTestAction.java代码==========
package com;

import com.opensymphony.xwork2.ActionSupport;

public class TokenTestAction extends ActionSupport {
	private String userName;
	
	 public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String doToken()
	 {
		 System.out.println("提交成功了!输入的名字是:"+userName);
		 
		 return SUCCESS;
	 }
}



这样的话所展示出来的是默认的提示信息:
The form has already been processed or no token was supplied, please try again.
因为在struts-core.jar中可以找到struts-message.properties
之中有:
struts.messages.invalid.token=The form has already been processed or no token was supplied, please try again.的配置,也就是默认的提示信息。

但我们在用的时候肯定是要用自己定义的提示信息,配置的步骤如下:
在src下加入:
==========struts.properties==========
#国际化文件
struts.custom.i18n.resources=messageResources
#(这个是资源文件的前缀,如果要是有文件目录就这样写xxxx.xxx...messageResources)

=========messageResources_zh_CN.properties====
#messageResources_zh_CN.properties
#国际化编码方式: 从dos 进入进行编码可格式如:natice2ascii -encoding UTF-8 文件的全限路径+文件名 输出文件地址
#编过码的文件如:username=\u7528\u6237\u540d  是标准的UNICODE编码,将其拷贝到本文件中。
struts.messages.invalid.token = \u5bf9\u4e0d\u8d77\uff0c\u4e0d\u80fd\u91cd\u590d\u63d0\u4ea4

这里的\u5bf9\u4e0d\u8d77\uff0c\u4e0d\u80fd\u91cd\u590d\u63d0\u4ea4是我将"请不要重复提交"转码过来的。
这样的话,表单页面展示的信息将会变成"请不要重复提交"。

注意:这种防止重复提交是保存在session中,分布式环境下的web应用可能就不适用了。

工程结构图如下:



  • 大小: 55 KB
4
1
分享到:
评论
1 楼 hbxflihua 2011-10-18  
struts2的重复提交,一直没用好。有时间教教我。建议楼主整个压缩文件。

相关推荐

    Struts2文件上传下载和表单重复提交问题

    对于防止重复提交,可能需要添加`token`或`token-session`拦截器。 5. **安全性考虑** 在实现文件上传和下载时,务必注意安全性问题。比如,防止文件名注入以绕过安全控制,限制上传文件的大小和类型以防止DoS攻击...

    Struts2解决表单重复提交

    对于第二种原因,即提交表单后刷新浏览器页面导致的重复提交,Struts2框架允许开发者通过配置结果视图的跳转方式来解决。默认情况下,Struts2使用的是dispatcher类型的forward跳转。为了避免刷新页面导致的重复提交...

    Struts2防止重复提交的解决方案

    ### Struts2防止重复提交的解决方案 #### 一、引言 在Web应用程序开发中,一个常见的问题是如何有效地防止表单的重复提交。这不仅能够提高用户体验,还能增强系统的安全性。Struts2作为一款广泛使用的Java Web应用...

    struts2的驱动和防止重复提交

    本文将深入探讨Struts2的属性驱动和模型驱动的区别,以及如何防止表单的重复提交,并讲解如何在表单中正确显示验证信息。 ### 属性驱动与模型驱动 **属性驱动**(Property Driven)是Struts2中的一种常见做法,它...

    Struts2防止表单重复提交示例

    在Struts2中防止表单重复提交的过程主要包括以下几个步骤: 1. **生成Token**:当用户发起表单请求时,服务器会生成一个唯一的Token并将其存储在服务器的会话(Session)中,同时将这个Token作为隐藏字段放入到HTML...

    struts token机制解决表单重复提交

    1. **配置Action**:在Struts的配置文件(struts.xml或struts.properties)中,为需要防止重复提交的Action添加一个拦截器,通常是`token`和`tokenSession`拦截器。 2. **生成Token**:在Action的准备方法(Prepare...

    Struts2 demo2

    通过这些知识点,我们可以了解到"Struts2 demo2"可能涵盖了Struts2的核心特性,如Action配置、数据校验、类型转换、OGNL表达式、防止重复提交和自定义标签库的使用。这些内容对于理解和实践Java web开发中的MVC模式...

    Struts之Token解决表单那重复提交

    在Struts配置文件中,为需要防止重复提交的Action添加一个拦截器引用,如`token`或`token-session`。这两个拦截器都可以处理Token,但`token-session`更安全,因为它会将Token存储在会话中,而不仅仅是请求中。 2....

    Struts表单重复提交问题

    Struts框架是一个经典的Java Web开发框架,用于构建MVC(模型-视图-控制器...在实际开发中,除了Struts的令牌机制,还可以结合前端的解决方案,如禁用提交按钮、使用AJAX异步提交等,来进一步增强防止重复提交的效果。

    用struts使用Token机制来实现防重复提交

    通过以上步骤,我们就能在Struts2框架下有效地防止重复提交。Token机制结合前端的防御措施,能为Java Web应用程序提供更加健壮的安全保障。在实际项目中,还可以根据需求进行更精细的定制,比如设置Token的有效时间...

    struts2自学文档

    - **防止重复提交**:通过在表单中加入隐藏字段、使用令牌等机制避免重复提交问题。 #### 十一、OGNL表达式 - **OGNL**:Object-Graph Navigation Language,是一种强大的表达式语言,用于获取或设置对象属性,...

    精通Struts 2:Web 2.0开发实战

    Web 2.0是指第二代互联网应用的概念,强调用户参与和社交网络服务,而Struts 2作为一款强大的Web开发框架,在Web 2.0环境下展现了其出色的开发效率和良好的可扩展性。 精通Struts 2 涉及到的知识点相当广泛,以下是...

    Struts 2.X权威指南(第3版) 第二章源码

    开发者需要了解如何定义Action类,如何使用注解或XML配置文件来配置它们,以及如何使用Execute-and-Redirect模式来防止重复提交。 接下来,Struts 2的配置文件是理解和使用框架的重要部分。可能包括了struts.xml或...

    Struts2 in action中文版

    15.3 使用令牌防止表单重复提交 313 15.3.1 使用s:token/表单标签 313 15.3.2 令牌拦截器规则的例外 314 15.4 自动显示等待页面 316 15.5 完成CRUD操作的一个动作 317 15.5.1 CRUD 317 15.5.2 拦截器和接口 318 ...

    struts2 详解文档

    24. **防止重复提交**:可以使用s:token标签防止表单重复提交的问题。 25. **Struts2整合Spring和Hibernate**:Struts2与Spring的整合可以实现依赖注入,与Hibernate的整合则方便进行持久化操作。 以上就是Struts2...

    struts2上传图片

    在"struts2上传图片"这个场景下,我们将深入探讨如何在Struts2框架下实现用户上传图片的功能,并关注网站统计访问量以及防止重复提交的问题。 首先,上传图片是Web应用中常见的功能,它涉及到前端表单设计、后端...

    防重复提交代码

    ### 防止重复提交代码知识点详解 #### 一、问题背景 在Web应用程序中,特别是在使用Java进行后端开发时,重复提交问题是常见的技术挑战之一。例如,在用户提交表单后,由于网络延迟或其他原因导致用户多次点击提交...

    投票系统基于struts2

    这部分可能使用Struts2的表单提交和Action处理来完成。 3. **投票展示**:系统需要显示投票主题和选项,以及每个选项的票数。这通常通过Action将数据传递给JSP页面,使用JSTL或其他标签库来渲染。 4. **投票操作**...

    struts2重定向实例源码

    这两种结果类型在实际应用中有着重要的作用,特别是对于处理URL重写、防止重复提交等问题。 首先,我们来理解"redirect"结果类型。"redirect"是HTTP协议中的302临时重定向,它会向客户端浏览器发送一个响应,指示...

    Struts2学习资料

    每种类型的Result都有不同的用途,例如`redirectAction`常用于防止重复提交,而`dispatcher`则用于展示动态生成的视图。 以上就是Struts2框架的基本工作原理和配置。通过理解和掌握这些概念,开发者能够有效地构建...

Global site tag (gtag.js) - Google Analytics