我有我的 ExportServlet,它正在生成 XLSX 文件 (Excel),我的用户将通过单击导出按钮从我的 GWT 应用程序中请求这些文件。
如果我使用 GET 方法,则会提示用户下载文件。代码如下所示:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
try
{
byte[] xlsx = createTest("");
sendXLSX(resp, xlsx, "test.xlsx");
}
catch (Exception e)
{
e.printStackTrace();
}
}
void sendXLSX(HttpServletResponse response, byte[] bytes, String name)
throws IOException
{
ServletOutputStream stream = null;
stream = response.getOutputStream();
response.setContentType(CONTENT_TYPE_XLSX);
response.addHeader("Content-Type", CONTENT_TYPE_XLSX);
response.addHeader("Content-Disposition", "inline; filename=" + name);
response.setContentLength((int) bytes.length);
stream.write(bytes);
stream.close();
}
这由 GWT 客户端以下列方式调用:
String url = GWT.getModuleBaseURL() + "ExportServlet";
Window.open(url, "", "");
并提示用户下载文件。很好,这就是我想要的:)
但是我想在请求中附加很多数据,而且 afaik,你可以在 URL 参数中放入多少数据是有限制的(“ExportServlet?data=...”),所以我想换行而是在 POST 请求中。
我从 GWT 尝试了以下方法:
String url = GWT.getModuleBaseURL() + "ExportServlet";
RequestBuilder builder = new RequestBuilder(
RequestBuilder.POST, url);
Request response = builder.sendRequest("test data", new RequestCallback()
{
@Override
public void onResponseReceived(Request request, Response response)
{
System.out.println("");
}
@Override
public void onError(Request request, Throwable exception)
{
System.out.println("");
}
});
这在我的servlet中:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
try
{
String data = req.getReader().readLine();
byte[] xlsx = createTest(data);
sendXLSX(resp, xlsx, "test.xlsx");
}
catch (Exception e)
{
e.printStackTrace();
}
}
但不会提示用户下载文件。调用 doPost 方法并由 servlet 接收数据,但我应该从 GWT 应用程序中收到的响应中提取 XLSX 文件吗?我该怎么做呢?
感谢任何帮助或评论:)