`
happmaoo
  • 浏览: 4507343 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

EasyJWeb中防重复提交使用及原理

阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>


1、开启自动防提交功能
如果你的模块中需要防止重复提交的地方比较多,则可以使通过配置文件开启自动防提交功能。如下面的Module配置:

<!--</span><span style="COLOR: #008000">文章来源</span><span style="COLOR: #008000">-->
modulename="newsSource"path="/newsSource"form=""scope="request"
action
="com.easyjf.cms.mvc.NewsSourceManageAction"
defaultPage
="list"autoToken="true">
module>

  开启了自动防重复提交功能后,只需要在要防重复提交的html表单中加上$html.token标签。而在Action中不用写任何与防提交有关的代码,系统自动就具会具有防重复提交的功能。

2、手动控制防提交
当然,如果不想使用自动防提交,则可以手动在Action中写代码控制重防提交。
比如在一个文章来源的Action中,在添加方法中:

publicPagedoAdd(WebFormform,Modulemodule)...{
saveToken();
returnmodule.findPage("edit");
}

在保存对象的Action中,需要验证该令牌是否合法:
publicPagedoSave(WebFormform,Modulemodule)...{
If(
!isVaildateToken())...{
form.addResult(
"msg","请求已经处理,请不要重复提交");
returnnewPage("add","/cms/newsSourceEdit.html");
}

NewsSourcens
=newNewsSource();
form.toPo(ns);
Longret
=this.service.addNewsSource(ns);
returnthis.doList(form,module);
}

并在添加对象的页面的html表单Form中添加一句:
$html.token
就完成了整个防止重复提交的功能。

注意:不管使用哪一种方式,一定要记得在相关html表单中加上$html.token这个标识。如下:

formmethod=”post”>
$html.token
form>

3、实现原理分析
  EasyJWeb中防止重复提交的处理过程类似于Struts的方法,采用的是令牌机制。其思路为在Action中使用AbstractCmdAction中提供的saveToken()方法来产生一个由sessionId和当前时间组成的令牌值,并将该令牌值保存在session中。在页面的表单中使用$html.token产生一个带有该token值的hidden域,在请求提交后,在处理请求的Action中使用AbstractCmdAction提供的isVaildateToken()方法来验证令牌是否合法。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌或者清空令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
重点是:
  第一、在请求中有session中同样的令牌值,请求中的令牌值通过表单中的隐藏字段来保存,保存的形式如: ,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的,并且是通过调用$html.token来自动产生的,在struts中是依赖其

标签产生的,而在EasyJWeb中,你需要显式的在Form里面调用。
  第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1764287


分享到:
评论

相关推荐

    EasyJWeb实用开发指南——开始EasyJWeb

    【EasyJWeb实用开发指南——开始EasyJWeb】 EasyJWeb是一款由中国开源团队EasyJF开发的Java Web应用程序框架,旨在简化和提高开发效率。它基于请求转发模型,采用MVC(Model-View-Controller)架构设计,使得开发者...

    EasyJWeb开发指南

    WebForm简化了Web应用中表单提交和验证的复杂性。 **Module** Module在EasyJWeb中用于组织相关的Controller、Page和WebForm,形成模块化的结构,有助于代码管理和项目维护。每个Module可以包含多个子Module,构建...

    EasyJWEB2.0

    **EasyJWEB 2.0:企业级Java Web开发的利器** EasyJWeb 2.0 是一个专门针对企业级Java Web应用设计的快速开发框架,...通过深入学习和熟练运用EasyJWeb 2.0,开发者可以提升开发效率,减少重复劳动,专注于业务创新。

    EasyJWeb快速入门指南

    - **下载方式**:通过官方网站下载EasyJWeb的SDK及源代码;或者直接从SVN库中checkout最新版本的源代码。 - **官方网站**:访问[http://www.easyjf.com/easyjweb/](http://www.easyjf.com/easyjweb/)下载EasyJWeb的...

    Easyjweb 1.2.2

    2. 简化开发流程:Easyjweb的核心目标是提高开发效率,它通过自动代码生成工具(如easyjweb-generator-1.2.jar中的工具)减少了重复的编码工作。例如,它可以自动生成DAO、Service和Action等代码,让开发者可以更快...

    easyjweb1.2

    仅仅依靠一个灵活、简易的MVC核心引擎还不能最大限度的提高开发速度,因此EasyJWeb还提供了一个灵活、易用的代码生成引擎及工具,通过使用代码生成引擎,可以快速完成基于JavaEE平台的企业级应用程序生成。...

    EasyJWeb框架0.7.0

    `lgpl.txt`文件通常包含的是 Lesser General Public License (LGPL) 的文本,这表明EasyJWeb框架0.7.0遵循LGPL开源协议,允许开发者在开源或商业项目中自由使用、修改和分发框架,但对修改后的源码有一定的开放要求...

    easyjweb-1.1

    《深入解析EasyJWeb 1.1:轻量级J2EE框架的精髓》 EasyJWeb是一个在Java EE开发领域备受关注的轻量级框架,它的核心目标是简化企业级应用的构建过程,提高开发效率。这个框架以其小巧、灵活、易用的特点,为开发者...

    EasyJWeb源码构建指南

    【EasyJWeb源码构建指南】是一篇关于如何构建和设置EasyJWeb开源项目的文章。EasyJWeb采用了Subversion(SVN)作为版本控制工具,而Maven作为项目管理工具,确保开发流程的标准化和高效性。 首先,你需要获取源代码...

    easyjweb-2.0快速开发

    easyjweb-2.0 java 快速开发 easyjweb-2.0 java 快速开发 easyjweb-2.0 java 快速开发

    wincvs、ajaxanywhere+struts示例+easyjweb指南

    【标题】"wincvs、ajaxanywhere+struts示例+easyjweb指南"涉及的是几个关键的IT技术领域,主要包括版本控制系统Wincvs、Web开发框架Struts与AjaxAnywhere的集成应用以及轻量级Java Web开发框架EasyJWeb的使用教程。...

    easyjweb初试--简单的say hello示例

    本示例将引导我们逐步了解如何使用EasyJWeb创建一个简单的"Say Hello"应用,这通常是我们初次接触任何Web框架时都会做的经典练习。 首先,我们需要理解EasyJWeb的核心概念。EasyJWeb基于Servlet技术,它提供了一种...

    EasyJWeb简易教程pdf版

    ### EasyJWeb简易教程知识点概览 #### 一、EasyJWeb框架背景及设计理念 ...通过以上内容的学习,开发者不仅能够掌握EasyJWeb框架的基本使用方法,还能深入了解其设计理念和技术细节,从而更好地应用于实际项目开发中。

    Easyjweb项目实例

    【Easyjweb项目实例】是针对Java Web开发框架Easyjweb的一个实践教程,它提供了丰富的学习资源和源代码,帮助开发者深入理解并掌握Easyjweb的使用。Easyjweb是一款基于Java的轻量级Web应用框架,设计目标是简化开发...

    easyjweb 开发文档

    作为一款由中国开源爱好者开发的框架,EasyJWeb的文档和注释全都是中文,便于国内开发者理解和使用。 EasyJWeb主要由四个关键部分构成: 1. **核心MVC**:框架的核心是一个基于模板技术的MVC模型,它允许开发者用...

    easyjweb 用户权限

    EasyJWeb是一款基于Java的轻量级Web开发框架,其在企业级应用中广泛使用,特别是在权限管理方面表现出色。本文将深入探讨EasyJWeb如何实现用户权限控制,以及相关的核心概念和技术点。 一、EasyJWeb权限体系概述 ...

    EasyJWeb-Velocity脚本简明教程

    在EasyJWeb中,尽管Velocity功能强大,但建议避免在界面模板中使用过于复杂的脚本。模板应保持简洁,以利于页面设计师操作。EasyJWeb提供了一些基本的模板脚本语句,通常足以应对大部分需求: 1. `$!obj`:直接输出...

    EasyJWeb入门手册

    可以让你easyjweb快速入门使用 EasyJWeb简介 EasyJWeb是基于java技术,能实现企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架...

Global site tag (gtag.js) - Google Analytics