我有我的ExportServlet,它們正在生成XLSX文件(Excel),我的用戶將通過單擊導出按鈕從我的GWT應用程序請求這些文件。從GWT調用servlet和發佈數據並下載由servlet生成的文件
如果我使用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文件?我想怎麼做呢?
欣賞任何幫助或意見:)
servlet的我發現這個職位是:http:/ /stackoverflow.com/questions/7282987/handle-attachment-in-response-with-requestbuilder-in-gwt這可能會回答我的問題。我會試試看,讓你們知道:)(不知道如何鏈接/關聯這個SO問題的鏈接) – 2012-08-02 13:22:24
你只是做了:) – 2012-08-24 20:21:07