此 URL 是一个指向服务器端的资源路径,我们首先在 Form 中设定资源路径然后提交给服务器端。这与编写 HTML 很相似,只是这里我们用 java 代码的形式写出来。另外,此 URL 也可以指定到服务器中的 Servlet 。这样,可以完成更复杂的应用逻辑。
本例所讲的是一个在 GWT 下应用同步通信的方式完成一个文件下载的例子。
首先,要在客户端的一个触发事件中完成如上述请求服务的代码。
清单 5. 完成请求服务的代码
// 这里指向一个专门负责下载文件的 Servlet ://DemoServiceConstants.DOWNLOAD_TASK_FILE String URL= GWT.getModuleBaseURL() + DemoServiceConstants.DOWNLOAD_TASK_FILE + "?fileLocation=" + fileLocation;; FormElement formElement = Document.get().createFormElement(); formElement.setAction(url); formElement.setName("ThisActionName"); formElement.setMethod("post"); Document.get().appendChild(formElement); formElement.submit(); |
其次,要在服务器端定义一个 DownloadFile Servlet 用于响应客户端的请求以及完成从服务器上读取文件和发送文件的 InputStream 和 OutputStream 。
清单 6. DownloadFile Servlet
Public class DownloadFile extends HttpServlet{ // 覆写 doGet 方法, 参数 request 是来自客户端的请求对象 // 参数 response 是服务器端的响应对象 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 取得文件路径 String location = request.getParameter("fileLocation"); // 定义读取文件的类 RandomAccessFile File file = new File(location); RandomAccessFile accessFile = new RandomAccessFile(file, "r"); // 如果想要在下载时出现一个下载对话框,可以在 Response Header 中做如下设置 response.addHeader("Content-Disposition","attachment;filename=\""+file.getName( )"\""); response.addHeader("Content-Length", String.valueOf(accessFile.length())); // 定义 OutputStream OutputStream out = response.getOutputStream(); // 从源文件流中读入并写入到输出流中 , 具体可参见代码 … … } } |
结束语
GWT-Ext 是目前主流的以 Java 为基础的 Web 界面编程工具。从笔者对几个 GWT 的扩展工具的实际经验横向比较来看,GWT-Ext 拥有非常优秀的编译打包速度,丰富的 API,加上大量的编程实例和论坛讨论,无可置疑的使 GWT-Ext 成为目前最优秀的 Web 2.0 的编程工具中的一员,相信 GWT-Ext 能有一个美好的未来。(责任编辑:A6)
时间:2009-07-01 14:21
来源:developerWorks 中国
作者:冯 鑫
原文链接