`

GWT 工作原理

    博客分类:
  • gwt
阅读更多


How does it work.¶
The browser renders a form with a file input and a hidden iframe.
Once the user selects a file (automatically or pushing a submit button) the browser asks the server for a session cookie using an ajax request, and submits the form.
The server starts the reception and continuously updates a session object with the process information.
While the file is being uploaded, the browser asks periodically the server for the progress status using ajax. It is possible since most browsers can open two simultaneous connections to the same server.
The server responds with a simple xml document with the real information about the size of the file and the amount of data transferred, or with an error message.
The client parses the response, calculates percentage, speed, remaining time, and updates a progress bar widget with this information.
Finally when the form has been completely sent, the server response is written in the iframe, instead of the main document.
In the case of any error, the client shows a message to the user.
The client code executes customisable methods when the file input changes, the upload process starts and finishes.
It is possible to cancel the file while it is being transfered. Because of the impossibility to cancel an active upload in the client side, the browser sends an ajax request to the server, and the server closes the socket.


*文件上传编写*


1.GWT前台

   [1]加入gwtupload.jar与commons-fileupload-1.2.jar以及commons-io-1.3.1.jar、 log4j.jar ;

   [2]编辑***.gwt.xml文件,加入:
       <inherits name="gwtupload.GWTUpload"/>
        <stylesheet src="Upload.css"/>

   [3]新建uploader对象:
MultiUploader defaultUploader = new MultiUploader();
defaultUploader.avoidRepeatFiles(true);设置避免重复文件上传
defaultUploader.setMaximumFiles(3); 设置上传文件最大数量
defaultUploader.setServletPath("a/a/a/a.upload"); 设置servletpath
Button submitButton = new Button("<B>上传</B>"); 按钮触发后台方法进行操作
submitButton.setWidth("70");
submitButton.addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
public void onClick(com.google.gwt.event.dom.client.ClickEvent arg0) {
RequestBuilder rbBuilder = new RequestBuilder(RequestBuilder.GET, "后台方法访问路径");
try {
rbBuilder.sendRequest("", new RequestCallback() {
public void onResponseReceived(Request request, Response response) {
SC.say(response.getText());
}
public void onError(Request request, Throwable exception) {
}
});
} catch (RequestException e) {
e.printStackTrace();
}
}
});

2.Grails后台项目

grails install-plugin gisuploader 加入插件 ,配置后台上传处理servlet
加入gwtupload.jar与jxl.jar、commons-fileupload.jar
从session中取得FileItem类型的集合,对集合进行遍历,取得文件的输出流进行处理(存入数据库或硬盘):
def files = (Vector<FileItem>)request.getSession().getAttribute("FILES");
     for (FileItem item : files ) {
                if (false == item.isFormField()) {
                  item.getOutputStream();
                }
              }


*上传明细文档*

# 新建MutiUploader,实例化Uploader,浏览器会渲染出一个form和隐藏的iframe
# 为生成的uploader对象注册onSubmitFormHander, setFileInput()设置文件上传框
# 为fileInput注册onFileInputChanged,来监控用户选择文件。
# 用户选择文件后,创建定时器automaticUploadTimer,将文件加入上传队列,并将文件状态设置为QUEUED,设置进度条为0
# 检测到文件队列中有文件,提交文件,激活onSubmitFormHander
# sendAjaxRequestToValidateSession()向服务器端发送Ajax检测session是否存在的请求,得到服务器端回应renderXmlResponse()后,正式提交上传文件。
# 进入后台接收请求dopost(),读取post请求parsePostRequest(),创建新的session,将读取到的文件项的集合放入session中,renderXmlResponse()返回客户端
# 设置客户端定时器updateStatusTimer定时通知IsUpdateable来更新status:为请求对象RequestBuilder注册onStatusReceivedCallback,
parseAjaxResponse(response.getText())连续定时读取服务器端监听器doget()的getUploadStatus()返回请求,读取xml文件具体内容Utils.getXmlNodeValue(),并根据返回数据设置进度条进度,
statusWidget.setProgress(transferredKB, totalKB)。
# 如此连续定时阶段上传,直至文件上传结束,uploadFinished()判断文件上传成功后,将上传状态更新为SUCCESS,关闭定时器。进度条隐藏,状态显示为DONE。
# 若在上传中途或结束后进行删除,则回调在statusWidget中注册的cancelHandler,进而调用uploader对象的cancel()方法,sendAjaxRequestToDeleteUploadedFile()向后台发送ajax删除请求,并将上传状态更新为DELETED。状态显示为DELETED。
# 若中途上传出错,则会调用cancelUpload()方法结束上传,并将上传状态更新为ERROR。状态显示为ERROR。
  • 大小: 90.4 KB
分享到:
评论

相关推荐

    gwt 练习 gwt学习

    在学习GWT的过程中,练习StockWatcher可以帮助你掌握GWT的核心组件和工作原理。逐步理解并实践这些知识点,你将能够创建更复杂、功能丰富的GWT应用程序。记得在实践中不断尝试、调试和优化,以加深对GWT的理解。

    GWT

    通过阅读博文(链接已给出,但在这里无法直接访问),你可能会了解到如何解析和理解GWT的内部工作原理,以及如何利用GWT的相关工具提升开发效率。例如,可能是关于性能优化、调试工具的使用,或者是GWT与其他工具...

    GWT Demo,GWT学习时的一些小例子

    通过研究这些示例,开发者可以更好地理解GWT的工作原理和最佳实践。 例如,一个示例可能展示了如何创建一个按钮控件,当用户点击按钮时,通过GWT的RPC机制向服务器发送请求,获取数据并更新页面上的显示。另一个...

    GWT EXT 教程全集

    最后,"GWT.ppt"可能是GWT的一份PPT演示文稿,通常会包含GWT的核心概念、工作原理以及开发流程的概述,适合初学者快速入门。 通过这些资源,开发者不仅可以深入理解GWT和EXT-GWT的基本概念,还能学习到实际开发中的...

    基于java的网页表格组件 GWT Advanced Table.zip

    Java是一种广泛使用的编程语言,尤其在开发Web应用程序时。GWT(Google Web Toolkit)是Google推出的一个开源工具包,它允许...同时,这也是一个实践Java到JavaScript编译过程的好机会,加深对GWT工作原理的理解。

    gwt实例,基于gwt-windows-1.5.2

    GWT 1.5.2发布于2008年,虽然现在已经比较过时,但对于初学者来说,它仍然是一个理解GWT基本概念和工作原理的好起点。 GWT的核心理念是通过Java编写客户端代码,然后自动编译为高效的JavaScript,使得开发者可以...

    GWT快速开发.pdf

    ”程序,以帮助理解GWT的基本工作原理。 1. **创建模块类**:在项目的src目录下新建一个Java类,例如`HelloGWT.java`。 2. **编写代码**: ```java public class HelloGWT extends GWTEntryPoint { public void ...

    GWT完整教程,Word版

    在高级教程中,你将接触到GWT的高级特性,如GWT编译器的工作原理,如何优化代码以提高性能,以及如何调试GWT应用。这一部分还将深入讨论GWT的客户端数据管理,包括使用 Gin 和 Guice 进行依赖注入,以及使用GWT的 ...

    gwt教程

    ## GWT的工作原理 1. **编译过程**:GWT使用Java源代码作为输入,然后通过Java-to-JavaScript编译器将其转换成优化过的JavaScript代码,这个过程称为GWT编译。编译器会处理类型检查、优化和代码分割,确保生成的...

    Gwt连接数据库的案例

    通过这个案例,你可以学习如何将GWT应用与数据库集成,理解GWT RPC的工作原理,以及如何安全有效地进行数据库操作。这将有助于你构建更复杂的GWT应用程序,提供丰富的用户体验并确保数据的安全交互。

    gwt 揭秘 源码

    这本书《GWT揭秘》深入探讨了GWT的工作原理和内部机制,提供了丰富的源码分析,帮助开发者更好地理解和运用GWT。现在,我们将深入探讨GWT的核心概念、工作流程以及源码解析的关键点。 1. **GWT简介** GWT最初由...

    gwt开发实例实现

    - **实战演练**:通过分析和运行这些示例,你可以进一步理解GWT的工作原理,以及如何在实际项目中运用。 总之,GWT结合Ajax技术为开发高性能的Web应用提供了一种强大而高效的方法。通过学习和实践GWT开发实例,...

    一个简单的GWT示例

    对于初学者,这是一个很好的机会来了解GWT的工作原理,如何创建UI,以及如何与服务器进行通信。通过查找并修复这个BUG,可以提高对GWT框架的理解,并且提升解决实际问题的能力。建议先阅读GWT的官方文档,理解基本...

    gwt-jar.rar

    GWT,全称为Google Web Toolkit,是Google推出的一款开源JavaScript开发框架,主要用于构建富互联网应用...通过理解GWT的工作原理和使用方法,开发者可以更高效地利用Java进行Web开发,并享受到其带来的便利和优势。

    GWT通信机制初探

    理解这两框架的源码有助于深入学习其工作原理,而它们作为工具,可以帮助开发者构建高效、可维护的Web应用程序。 总结来说,本文可能会涵盖GWT的通信机制,包括RequestBuilder和AsyncCallback的使用,以及如何将GXT...

    smartGWT 3.1 最新版本

    深入研究SmartGWT的源码,可以帮助开发者更全面地了解其工作原理和内部机制。源码中包含了组件的实现逻辑、事件处理和数据通信策略等,这对于定制化开发或优化性能是非常有价值的。通过学习源码,开发者可以学习到...

    GWT初学者手册

    《GWT初学者手册》是针对想要学习Google Web Toolkit...综上所述,《GWT初学者手册》将帮助开发者理解GWT的工作原理、语言特性限制以及如何在各种浏览器环境下构建和优化应用程序,是初学者快速入门GWT的宝贵资源。

    初次接触GWT,知识点概括

    下面我们将深入探讨GWT的主要特点、工作原理以及如何开始使用GWT进行开发。 1. **GWT的特点** - **类型安全**:由于使用Java编程,GWT提供了静态类型检查,避免了常见的JavaScript错误。 - **跨浏览器兼容**:GWT...

    GWT编写hello world

    这个"Hello World"教程是GWT入门的基础,通过创建一个简单的应用程序来介绍GWT的工作原理和基本使用方法。 首先,我们要理解**GWT项目结构**。一个典型的GWT项目包含以下几个关键部分: 1. **src/main/java**:存放...

Global site tag (gtag.js) - Google Analytics