java - 在 GWT 中使用 RequestBuilder 处理附件以响应

标签 java gwt pdf attachment

我正在从 GWT 客户端向 HTTPServlet 发出 HTTP POST 请求。此 Servlet 从请求内容创建 PDF 文件并将其写入响应流。

响应流的头部是:

Content-Disposition: attachment; filename=report.pdf

我想在用户浏览器的新窗口中打开此 PDF 或提示他下载它。

import com.google.gwt.http.client.*;
...

String url = "http://www.myserver.com/getData?type=3";
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode(url));

try {
  Request request = builder.sendRequest(data, new RequestCallback() {
    public void onError(Request request, Throwable exception) {
       // Couldn't connect to server (could be timeout, SOP violation, etc.)     
    }

    public void onResponseReceived(Request request, Response response) {
      if (200 == response.getStatusCode()) {
          // Process the response in response.getText()
          // Window.open(url, "_blank", "");
      } else {
        // Handle the error.  Can get the status text from response.getStatusText()
      }
    }       
  });
} catch (RequestException e) {
  // Couldn't connect to server        
}

我应该如何处理 onResponseRecieved 中的响应?

最佳答案

我认为在这种情况下您不应该使用单个 RequestBuilder AJAX 调用。您可以通过调用正常调用并让浏览器处理 PDF 响应(使用 PDF 查看器插件显示它或打开“保存”对话框)来依赖默认浏览器行为。

有几种方法可以实现这一点:

  1. 如果您可以在 GET 请求中传递您的数据(仅适用于小数据量),您可以使用数据作为 GET 参数创建 URL,然后使用 Window.open() 打开一个新的浏览器窗口传递带有数据的 URL。

  2. 对于大量数据,您可以先使用 RequestBuilder 将数据发布到服务器以临时存储数据并存储在 RequestCallback.onResponseReceived() 中。在备选方案 1 中打开一个带有短 URL 的新浏览器窗口。在服务器端,您必须将 PDF 生成 servlet 分成两部分:一个使用 POST 方法的数据存储 servlet(即将数据存储到网络 session 中)和一个PDF 使用 GET 方法呈现 servlet,它从 session 中取出数据(并删除它)并且不需要大参数。

  3. 使用 POST 方法、数据的隐藏字段和 PDF 生成 servlet URL 创建一个表单。用您的数据填充隐藏字段并以编程方式提交表单(即 FormPanel.submit() )。如果您使用 target name 创建 FormPanel浏览器打开一个新窗口或使用指定的框架来处理响应。

关于java - 在 GWT 中使用 RequestBuilder 处理附件以响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282987/

相关文章:

pdf - 用汉字填充pdf字段乱码

java - 在 JPA 中使用两个或多个参数的搜索查询

java - 我可以用 Tomcat 8 注册多个 HttpSessionListener 覆盖吗?

java - 使用 arquilian 测试时何时构建数据库结构?

java - 删除重复项(两个值)- ArrayList 中的重复值

java - 如何在Eclipse中打开gwt设计器?

python - 将 Python pdfrw PdfReader 对象写入字节/文件流数组

c# - 使用 iText5 for .NET 读取 PDF 文件

gwt - 如何在 GWT 中引用第三方库源代码供客户端使用?

java - Google App Engine JDO 错误