我有一个名为ExportServlet的程序,能够生成XLSX(Excel)文件。当用户点击导出按钮时,我的GWT应用程序将请求此文件。
如果使用GET方法,用户将会收到下载提示。代码如下:
这是由GWT客户端以以下方式调用的:
但是用户没有收到下载文件的提示。doPost方法被调用并且数据被servlet接收,但我应该从在GWT应用程序中接收的响应中提取XLSX文件吗?我该怎么做呢?
非常感谢任何帮助或评论 :)
如果使用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, "", "");
用户会收到下载文件的提示。很好,这正是我想要的 :)
但是我希望在请求中附加大量数据,据我所知,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文件吗?我该怎么做呢?
非常感谢任何帮助或评论 :)