- 浏览: 352501 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (160)
- webservice (2)
- 数据库开发 (9)
- LINUX (6)
- 团队协作 (5)
- 前端技术 (4)
- J2EE (31)
- web服务器 (9)
- 经验常识 (12)
- 开发工具 (17)
- 项目管理 (7)
- 重构与设计模式 (8)
- 安全技术 (1)
- 并发编程 (1)
- 移动互联网 (2)
- 编码风格 (1)
- 领域建模 (1)
- 随想杂记 (12)
- 翻译 (2)
- 问题排查 (2)
- 数据挖掘 (4)
- 软件架构 (1)
- java语言基础知识 (13)
- 文件读写 (1)
- mac研发笔记 (1)
- 网络问题 (1)
- python学习 (0)
- Java8新特性 (1)
- soft kes collections (1)
最新评论
-
cremains:
...
java8新特性学习笔记 -
bingyingao:
guooo 写道很好的总结,不知能否转载?可以,多谢关注
又四年了,再看如何快速融入一个新团队 -
guooo:
很好的总结,不知能否转载?
又四年了,再看如何快速融入一个新团队 -
omeweb:
又过了好几年了,有啥新感悟没有?
两年已过去,再看该如何快速融入新团队 -
kely39:
感谢楼主,问题已解决
包冲突问题的解决方法
基本原理:用户访问做了重复提交的页面,服务器会生成一个令牌,这个令牌一方面以隐藏字段的方式存于页面上。另一方面保存与session中,当用户第一次提交信息时,服务端会拿页面上得同session里的作对比,相同则通过,并清空session中的值。
这样,当第二次提交该页面时,页面上得值与session中的就不一样了,这样便会返回input,提示重复提交了。
========下面是token.jsp代码==========
========下面是struts.xml代码==========
========下面是TokenTestAction.java代码==========
这样的话所展示出来的是默认的提示信息:
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==========
=========messageResources_zh_CN.properties====
这里的\u5bf9\u4e0d\u8d77\uff0c\u4e0d\u80fd\u91cd\u590d\u63d0\u4ea4是我将"请不要重复提交"转码过来的。
这样的话,表单页面展示的信息将会变成"请不要重复提交"。
注意:这种防止重复提交是保存在session中,分布式环境下的web应用可能就不适用了。
工程结构图如下:
这样,当第二次提交该页面时,页面上得值与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应用可能就不适用了。
工程结构图如下:
发表评论
-
log4j关键点
2013-09-25 19:43 1062日志级别 级别顺序(低到高): DEBUG < INFO ... -
java集合排序
2013-09-24 19:18 1119java对象集合排序在开发中使用非常广泛,需要重点理解,而它实 ... -
关于java.lang.OutOfMemoryError的参数配置误区
2013-09-10 15:10 1126这两天在本机用eclipse的jetty插件跑项目,老是抛出一 ... -
spring这样的来配置一些常量很方便
2013-09-03 09:48 2497<util:list id="haidilao ... -
快速查找线程死锁(展苍)
2012-12-23 13:25 0Thread dump Thread dump是比较容易查找 ... -
javap查看虚拟机为你做了什么
2012-12-02 15:38 559public class Test { publi ... -
javaweb开发乱码问题整理
2012-03-15 14:01 997j2ee方面的开发总会遇到各种各样的乱码问题,总想抽空整理一下 ... -
用正则表达式扣出字符串中指定的多处内容
2011-12-26 15:29 1452截取打印出所有<record></recor ... -
java反射机制学习
2011-11-19 13:01 1038反射基本概念: 在java ... -
java匿名内部类使用场景列举
2011-11-18 10:57 2613java内部类是怎么一回事?匿名内部类何时会用到,之前一直很模 ... -
使用UUID生成32位ID
2011-11-14 11:11 21326UUID(Universally Unique Identif ... -
java数据类型介绍
2011-11-09 14:34 957java数据类型介绍 简单类型大小范围/精度 ... -
Exception点滴
2011-11-08 14:24 946java.lang.reflect.UndeclaredThr ... -
将set集合转为list并对对象进行排序
2011-11-06 15:09 7743之前用hibernate的时候,遇到一对多的表结构。比如班级( ... -
src地址为空导致两次进入到action请求地址
2011-10-29 13:05 1530今天用struts开发一个页面,奇怪的是我点了一次提交,达到目 ... -
struts标签与ognl表达式用法点滴
2011-10-27 18:43 1405struts标签的使用中,会涉及一些比较细的点儿,汇总一下,以 ... -
struts2第四回:工作流程解析
2011-10-14 15:18 876这两天没什么任务,就想研究一下struts2的源码,看了半天, ... -
struts2第三回:自定以拦截器
2011-10-13 19:14 1097实现一个拦截器并调用。 ============下面是Logi ... -
include与jsp:include与s:action与s:include与iframe用法汇总
2011-10-13 13:47 207151.<%@ include file="../ ... -
struts2第一回:validate框架使用
2011-10-12 16:42 5037struts2总结 ...
相关推荐
对于防止重复提交,可能需要添加`token`或`token-session`拦截器。 5. **安全性考虑** 在实现文件上传和下载时,务必注意安全性问题。比如,防止文件名注入以绕过安全控制,限制上传文件的大小和类型以防止DoS攻击...
对于第二种原因,即提交表单后刷新浏览器页面导致的重复提交,Struts2框架允许开发者通过配置结果视图的跳转方式来解决。默认情况下,Struts2使用的是dispatcher类型的forward跳转。为了避免刷新页面导致的重复提交...
### Struts2防止重复提交的解决方案 #### 一、引言 在Web应用程序开发中,一个常见的问题是如何有效地防止表单的重复提交。这不仅能够提高用户体验,还能增强系统的安全性。Struts2作为一款广泛使用的Java Web应用...
本文将深入探讨Struts2的属性驱动和模型驱动的区别,以及如何防止表单的重复提交,并讲解如何在表单中正确显示验证信息。 ### 属性驱动与模型驱动 **属性驱动**(Property Driven)是Struts2中的一种常见做法,它...
在Struts2中防止表单重复提交的过程主要包括以下几个步骤: 1. **生成Token**:当用户发起表单请求时,服务器会生成一个唯一的Token并将其存储在服务器的会话(Session)中,同时将这个Token作为隐藏字段放入到HTML...
1. **配置Action**:在Struts的配置文件(struts.xml或struts.properties)中,为需要防止重复提交的Action添加一个拦截器,通常是`token`和`tokenSession`拦截器。 2. **生成Token**:在Action的准备方法(Prepare...
通过这些知识点,我们可以了解到"Struts2 demo2"可能涵盖了Struts2的核心特性,如Action配置、数据校验、类型转换、OGNL表达式、防止重复提交和自定义标签库的使用。这些内容对于理解和实践Java web开发中的MVC模式...
在Struts配置文件中,为需要防止重复提交的Action添加一个拦截器引用,如`token`或`token-session`。这两个拦截器都可以处理Token,但`token-session`更安全,因为它会将Token存储在会话中,而不仅仅是请求中。 2....
Struts框架是一个经典的Java Web开发框架,用于构建MVC(模型-视图-控制器...在实际开发中,除了Struts的令牌机制,还可以结合前端的解决方案,如禁用提交按钮、使用AJAX异步提交等,来进一步增强防止重复提交的效果。
通过以上步骤,我们就能在Struts2框架下有效地防止重复提交。Token机制结合前端的防御措施,能为Java Web应用程序提供更加健壮的安全保障。在实际项目中,还可以根据需求进行更精细的定制,比如设置Token的有效时间...
- **防止重复提交**:通过在表单中加入隐藏字段、使用令牌等机制避免重复提交问题。 #### 十一、OGNL表达式 - **OGNL**:Object-Graph Navigation Language,是一种强大的表达式语言,用于获取或设置对象属性,...
Web 2.0是指第二代互联网应用的概念,强调用户参与和社交网络服务,而Struts 2作为一款强大的Web开发框架,在Web 2.0环境下展现了其出色的开发效率和良好的可扩展性。 精通Struts 2 涉及到的知识点相当广泛,以下是...
开发者需要了解如何定义Action类,如何使用注解或XML配置文件来配置它们,以及如何使用Execute-and-Redirect模式来防止重复提交。 接下来,Struts 2的配置文件是理解和使用框架的重要部分。可能包括了struts.xml或...
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 ...
24. **防止重复提交**:可以使用s:token标签防止表单重复提交的问题。 25. **Struts2整合Spring和Hibernate**:Struts2与Spring的整合可以实现依赖注入,与Hibernate的整合则方便进行持久化操作。 以上就是Struts2...
在"struts2上传图片"这个场景下,我们将深入探讨如何在Struts2框架下实现用户上传图片的功能,并关注网站统计访问量以及防止重复提交的问题。 首先,上传图片是Web应用中常见的功能,它涉及到前端表单设计、后端...
### 防止重复提交代码知识点详解 #### 一、问题背景 在Web应用程序中,特别是在使用Java进行后端开发时,重复提交问题是常见的技术挑战之一。例如,在用户提交表单后,由于网络延迟或其他原因导致用户多次点击提交...
这部分可能使用Struts2的表单提交和Action处理来完成。 3. **投票展示**:系统需要显示投票主题和选项,以及每个选项的票数。这通常通过Action将数据传递给JSP页面,使用JSTL或其他标签库来渲染。 4. **投票操作**...
这两种结果类型在实际应用中有着重要的作用,特别是对于处理URL重写、防止重复提交等问题。 首先,我们来理解"redirect"结果类型。"redirect"是HTTP协议中的302临时重定向,它会向客户端浏览器发送一个响应,指示...
每种类型的Result都有不同的用途,例如`redirectAction`常用于防止重复提交,而`dispatcher`则用于展示动态生成的视图。 以上就是Struts2框架的基本工作原理和配置。通过理解和掌握这些概念,开发者能够有效地构建...