Struts2本身提供了重复提交的检查机制,但是我要的不是弹出一个出错页面,而是当作什么也没发生,只执行一次提交
1.设置一个变量,设置一个变量,只允许提交一次。
<script type="text/javascript">
function checkSubmit() {
if (checkSubmitFlg == true) {
return false;
}
checkSubmitFlg = true;
return true;
}
</script>
<form onsubmit="return checkSubmit();" method="post">
方法1在IE6和FIREFOX上实验下来都有效
2.禁用按钮的方式
由于我们的那个服务器实在太慢,让按钮变灰,给用户的体验更好一些
<script type="text/javascript">
function disableSubmit(form) {
var elements = form.elements;
for (var i = 0; i < elements.length; i++) {
if (elements[i].type == 'submit') {
elements[i].disabled = true;
}
}
}
</script>
<form name="form1" onsubmit="setTimeout('disableSubmit(form1)',100) return checkSubmit();" method="post">
马上禁用的话会导致按钮单独的action设置失效,所以要加一个延时
方法2在IE6有效。在FIREFOX无效,原因未知。但反正是第二保险,也没关系
3. action有这样的一个方法生成令牌
protected String generateToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session.getId().getBytes();
byte now[] =
new Long(System.currentTimeMillis()).toString().getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
return (toHex(md.digest()));
} catch (IllegalStateException e) {
return (null);
} catch (NoSuchAlgorithmException e) {
return (null);
}
}
在更新的时候防止按钮重复点击,主要是用Session来做判断
在JSP/Servlet中可以
JSP页面
<input type="hidden " name=" <% =com.lims.util.SynchroToken.TOKEN_NAME%> " value =" <%= com.lims.util.SynchroToken.getToken(request)%>" > |
SynchroToken.java
package com.lims.util;
import org.apache.struts.util.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import org.apache.struts.action.*;
/** * <p>Title: SynchroToken </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: NetStar</p> * @author Jstar * @version 1.0 * Created in 2004/04/21 */
public class SynchroToken{
public final static java.lang.String TOKEN_NAME = "_token";
public static boolean checkToken (HttpServletRequest request){
boolean isEqual = false;
HttpSession session = request.getSession ();
String formToken = request.getParameter (TOKEN_NAME);
String sessionToken = (String)session.getAttribute (TOKEN_NAME);
System.out.println ("formToken: " + formToken + " sessionToken: " +
sessionToken);
if (formToken != null && sessionToken == null){
session.setAttribute (TOKEN_NAME, formToken);
isEqual = true;
}
return isEqual;
}
/**
* Insert the method's description here.
* Creation date: (4/19/2004 3:23:25 PM)
* @return java.lang.String
* @param request javax.servlet.http.HttpServletRequest
*/
public static String getToken (HttpServletRequest request){
String token = "" + System.currentTimeMillis ();
HttpSession session = request.getSession ();
if (session != null){
session.removeAttribute (TOKEN_NAME);
}
return token;z
}
/**
* Insert the method's description here.
* Creation date: (4/19/2004 3:24:10 PM)
* @return java.lang.String
*/
final static java.lang.String getTOKEN_NAME (){
return TOKEN_NAME;
}
public static String message (PageContext pageContext, String key) throws
JspException{
return RequestUtils.message (pageContext, null, null, key);
}
}
|
分享到:
相关推荐
这种方法可以防止跨站请求伪造(CSRF)攻击,同时也可防止重复提交。 4. **Session存储状态** 另一种方法是利用session存储用户的提交状态。当表单被提交后,将一个标识符存入session,然后在处理请求时检查这个...
在Java服务器页面(JSP)中,防止重复提交是一个重要的考虑因素,因为它可能导致数据不一致性和其他业务逻辑问题。重复提交通常发生在用户由于网络延迟或误操作而多次点击提交按钮时。以下是一些关于如何在JSP中实现...
本文将深入探讨自定义标签在防止重复提交中的实现原理和应用。 首先,我们要理解什么是自定义标签(Custom Tags)。在JavaServer Pages(JSP)中,自定义标签是扩展JSP功能的一种方式,它可以封装复杂的业务逻辑...
### JSP重复提交问题及其解决方法 #### 一、引言 在Web应用程序开发中,尤其是在使用Java Server Pages (JSP)技术时,一个常见...在实际应用中,结合多种方法可以更有效地防止重复提交,提高系统的健壮性和用户体验。
在Web开发中,尤其是使用JavaServer Pages (JSP)时,Form表单的重复提交问题是一个常见的挑战。这可能导致数据不一致性和服务器资源的浪费。本文将探讨三种防止JSP表单重复提交的方法。 首先,我们可以使用...
在Struts2框架中,防止重复提交是一个重要的安全性考量,因为重复提交可能导致数据不一致性和资源浪费。在上述描述中,给出了三种主要方法来解决这个问题: 1) **使用 `<s:token>` 标签** Struts2 提供了一个称为 ...
1. **客户端验证**:在JavaScript中,可以监听表单提交事件,一旦表单提交,禁用提交按钮,防止用户再次点击。但这种方法并不完全可靠,因为JavaScript可以被禁用,或者恶意用户可能绕过这个限制。 2. **服务器端...
// 提交后移除token,防止重复提交 } else { // 重复提交,显示错误信息... } %> ``` 以上就是关于防止JSP表单重复提交的相关知识,包括客户端和服务器端的策略,以及如何在实际项目中运用这些策略。通过这些...
对于第一种情况,可以使用JavaScript防止表单重复提交。方法是,在页面中添加JavaScript代码,判断提交按钮是否已经点击过, 如果已经点击过,则不允许再次提交。 使用Session防止表单重复提交 对于后面两种情况,...
### 防止重复提交代码知识点详解 #### 一、问题背景 ...需要注意的是,虽然这种方法可以在一定程度上防止重复提交,但在实际应用中还需要结合其他手段,如前端JavaScript控制等方式,以提供更全面的防护措施。
JSP 重复提交问题解决方案 JSP 重复提交问题是一个常见的Web 开发问题,...重复提交、重复刷新、防止后退的问题是在 Web 开发中常见的问题,解决这些问题可以使用上述方法,但需要根据具体情况选择合适的解决方案。
在这个SSH笔记中,我们将深入探讨四个核心主题:数据验证、文件上传下载、防止表单重复提交以及自定义拦截器。 首先,我们来谈谈数据验证。在Web应用中,数据验证是必不可少的一环,它确保用户输入的数据符合业务...
服务器端检查这个令牌,如果已经存在,就拒绝处理请求,从而防止重复提交。 - **Session属性**:在Action中设置一个session属性,表示表单已提交。当检测到该属性已存在时,忽略后续的提交请求。 - **客户端验证**...
在JSP开发中,防止表单(Form)重复提交是一个重要的问题,因为它可能导致数据的冗余或不一致性。以下是对避免Form重复提交的三种常见方案的详细解释: 1. JavaScript控制提交: 这种方法通过JavaScript在客户端...
本主题将深入探讨Struts框架中的数据回显、模型驱动以及如何防止表单重复提交,这些都是在实际开发中非常关键且实用的技术点。 1. 数据回显: 数据回显是指在用户提交表单后,服务器端处理数据并返回结果页面时,将...
- `main.css`:这通常是主样式表文件,包含应用于整个Web应用的CSS样式,可能包含防止重复提交的页面布局和样式。 - `employees.jsp`:可能是一个显示员工列表的页面,用户可能在此选择某个员工进行操作,如编辑或...
在网页开发中,尤其是涉及到数据提交的场景,防止用户意外或恶意重复提交是非常重要的,因为这可能导致数据不一致和系统异常。JSP(JavaServer Pages)作为动态网页技术,提供了多种方式来解决这个问题。以下是一些...