如果表单被重复的提交,第二次提交可能产生错误,用户不断的刷新页面,调用对应的Action,不进行控制,如注册页面不断的和数据库交互,对于服务器端负载太大。
在此利用Struts的同步令牌机制来解决问题
主要是利用了Action类中的一些方法
(1)saveToken(HttpServletRequest request)
生成一个新的令牌值并保存在session中(每次生成的都不一样)
(2)isTokenValid(HttpServletRequest request)
判断当前session和请求参数中的令牌值是否匹配,若匹配返回true,若不匹配返回false
(3)resetToken(HttpServletRequest request)
将session中的令牌值删除
下面以一个简单的注册的例子来介绍
现在有一个写好的register.jsp的登录页面,现在我们对它来做一下修改,使它能够防止被重复的提交。
1.添加一个过滤器,使得在执行register.jsp之前先执行过滤器
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request =
(HttpServletRequest)arg0;
//跳转到PreRegisterAction
request.getRequestDispatcher
("/token/preRegister.do")
.forward(arg0, arg1);
}
过滤器执行preRegister
2.添加Action,PreRegisterAction.java,这个action很简单,就是生成一个新的令牌放在session中
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//生成一个新的令牌值放置在session中
super.saveToken(request);
return new ActionForward
("/token/register.jsp");
}
3.在register.jsp页面上的form改为<html:form action="/token/sufRegister">
4.添加Action,SufRegisterAction.java
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RegisterForm registerForm = (RegisterForm) form;
//判断session和请求参数中的令牌值是否匹配
if(!super.isTokenValid(request)){//不匹配
//若不匹配说明重复提交表单了,那么在
//页面上要提示一下用户
ActionMessages errors =
new ActionMessages();
ActionMessage message =
new ActionMessage("error.token");
errors.add("token", message);
super.saveErrors(request, errors);
return new ActionForward
(mapping.getInput());
}else{//匹配
//若匹配说明用户是第一次提交表单
//构造一个Customer对象,并调用模型层中
//的业务接口方法register()进行用户注册
System.out.println("注册成功...");
//若注册成功要从session中删除令牌值
super.resetToken(request);
return new ActionForward
("/token/login.jsp");
}
}
这样就完成了利用同步令牌来防止网页重复提交的问题。
分享到:
相关推荐
本文将深入探讨如何在Struts框架中利用Token机制来解决这个问题。 一、表单重复提交问题 表单重复提交可能发生在用户点击提交按钮后,由于网络延迟或刷新页面等原因,导致请求被多次发送到服务器。如果不加以控制,...
在提供的压缩包文件"struts+token机制解决表单重复提交"中,可能包含了具体的Struts配置文件、Action类、Interceptor实现以及示例代码,可以帮助读者更深入地理解并实践这个机制。通过对这些代码的学习和研究,...
总的来说,Struts Token机制通过维护一个临时的、一次性使用的Token,有效地解决了Web应用中的表单重复提交问题,提高了系统的稳定性和安全性。在实际开发中,应根据项目需求灵活运用并优化此机制。
下面将详细讲解Struts2令牌解决重复提交问题的过程: 1. **生成令牌**:在Action中,使用`TokenAwareActionSupport`作为基类,这个类实现了`TokenSessionStore`接口,可以方便地获取和验证令牌。在表单展示之前,...
为了有效地防止Web应用程序中的表单重复提交问题,Struts框架提供了一种简单而强大的解决方案——同步令牌模式(Synchronization Token Pattern, STP)。下面详细介绍如何在Struts项目中实现这一功能。 1. **生成...
Struts的Token机制是Web应用中防止表单重复提交的一种常用方法。在处理表单提交时,如果用户意外地多次...在阅读《用Struts的Token机制解决表单重复提交.doc》文档时,可以更深入地学习如何在实际项目中应用这一机制。
Struts1是一个经典的Java Web开发框架,它在处理表单提交时可能会遇到一个问题:用户意外地多次点击提交按钮,导致服务器接收到重复的请求。为了解决这个问题,Struts1引入了“令牌”机制,也称为Token Session或...
这个机制主要是用来解决HTTP协议无状态特性带来的问题,比如用户在提交表单时,由于网络延迟或误操作,可能会导致重复提交。 **什么是令牌(Token)?** 令牌(Token)是一种验证机制,它通常是一个唯一且随机生成...
在Struts框架中,令牌机制(Token)是一种防止重复提交的有效方法,它主要用于处理表单数据的并发控制,防止用户意外或者恶意地多次提交表单,从而确保数据的一致性和安全性。 在Web应用中,用户可能会因为网络延迟...
Struts2提供了一种名为“token”的机制来解决这个问题。 **什么是Token机制?** Token机制是一种防止重复提交的方法,它通过在客户端(通常是浏览器的session或者cookie)和服务器端存储一个唯一的令牌,确保每个...
Struts1.2框架在处理Web应用时,尤其是在表单提交场景中,可能会遇到重复提交的问题。这会导致数据不一致性和服务器资源的浪费。为了解决这个问题,Struts1.2引入了Token机制,用于防止用户意外或恶意的多次点击提交...
Struts框架是一个经典的Java Web开发框架,用于构建MVC(模型-视图-控制器...在实际开发中,除了Struts的令牌机制,还可以结合前端的解决方案,如禁用提交按钮、使用AJAX异步提交等,来进一步增强防止重复提交的效果。
而Struts1.x的令牌机制(Token)则是防止重复提交、跨页请求攻击的重要手段。在此,我们将深入探讨Struts1.x令牌的使用方法及其背后的原理。 首先,理解为何需要令牌。在Web应用中,用户可能会意外或恶意地多次点击...
通过以上步骤,我们可以有效地利用Struts框架内置的令牌机制来解决表单重复提交的问题。这种方法简单易行,同时也能提高应用的安全性和用户体验。在实际项目中,可以根据具体需求灵活调整令牌的有效期、验证逻辑等,...
总的来说,Struts2的`token`拦截器是防止重复提交的有效解决方案,通过结合合理的拦截器配置和跳转策略,可以确保应用程序的稳定性和数据一致性。在实际开发中,还需要考虑其他因素,如异常处理、用户体验优化等,以...
- **令牌(Token)机制**:在用户提交表单前,服务器生成一个唯一的令牌,将其隐藏在表单中。当表单提交时,服务器检查令牌是否已存在于session或请求中,如果存在且与提交的令牌匹配,则处理请求,否则忽略。 - *...
总结来说,Servlet、Struts和SpringMVC都提供了各自的解决方案来防止表单重复提交,主要方法包括使用Session、令牌机制、重定向和拦截器等。开发者可以根据项目需求选择合适的方式来实现,确保应用的稳定性和数据...
在实际开发中,Struts框架的一个常见问题就是“重复提交”。本文将深入探讨这个问题,并提供解决方案。 一、什么是重复提交? 在Web应用中,用户可能会意外地多次点击提交按钮,导致服务器端接收到多个相同请求,这...