gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:09 25 4
gpt4 key购买 nike

我正在从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com