ユーザーがエクスポート ボタンをクリックして GWT アプリケーションから要求する XLSX ファイル (Excel) を生成する ExportServlet があります。
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("");
}
});
そしてこれは私のサーブレットで:
@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 メソッドが呼び出され、データがサーブレットによって受信されますが、GWT アプリで受信した応答から XLSX ファイルを抽出する必要がありますか? そして、どうすればそれを行うことができますか?
ヘルプやコメントに感謝します:)