Mam mój ExportServlet, który generuje pliki XLSX (Excel), które mój użytkownik będzie żądał od mojej aplikacji GWT, klikając przycisk eksportu.Serwlet wywołania z GWT z danymi pocztowymi i pobranym plikiem wygenerowanym przez serwlet.
Jeśli użyję metody GET, użytkownik zostanie poproszony o pobranie pliku. Kod wygląda następująco:
@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();
}
ta wywoływana jest przez klienta GWT w następujący sposób:
String url = GWT.getModuleBaseURL() + "ExportServlet";
Window.open(url, "", "");
a użytkownik jest proszony, aby pobrać plik. Dobrze, to jest to, czego chcę :)
Ale chciałbym załączyć dużo danych w żądaniu, a afaik, istnieje limit ilości danych, które można umieścić w parametrze adresu URL ("ExportServlet? Data = ... "), więc chciałbym zawrzeć to w żądaniu POST.
próbowałem następujących z 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("");
}
});
i to w moim apletu:
@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();
}
}
ale użytkownik nie jest proszony, aby pobrać plik. Zostaje wywołana metoda doPost, a dane są odbierane przez serwlet, ale czy mam wyodrębnić plik XLSX z odpowiedzi, którą otrzymuję w aplikacji GWT? i jak mam to zrobić?
wdzięczni za każdą pomoc lub komentarze :)
Znalazłem ten post: http://stackoverflow.com/questions/7282987/handle-attachment-in-response- with-requestbuilder-in-gwt, który może odpowiedzieć na moje pytanie. Wypróbuję to i pozwolę wam znać :) (nie wiem jak połączyć/powiązać link z tym pytaniem SO) –
właśnie to zrobiłeś :) –