Tengo mi ExportServlet, que está generando archivos XLSX (Excel) que mi usuario solicitará desde mi aplicación GWT haciendo clic en un botón exportar.Llamar servlet desde GWT con datos de publicación y descargar archivo generado por el servlet
Si utilizo el enfoque GET, se solicita al usuario que descargue el archivo. El código es el siguiente:
@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();
}
Esta es invocado por el cliente GWT de la siguiente manera:
String url = GWT.getModuleBaseURL() + "ExportServlet";
Window.open(url, "", "");
y se pide al usuario para descargar el archivo. Bueno, eso es lo que quiero :)
Pero me gustaría adjuntar una gran cantidad de datos en la solicitud, y afaik, hay un límite en la cantidad de datos que puede poner en un parámetro de URL ("ExportServlet? Data = ... "), entonces me gustaría envolverlo en una solicitud POST en su lugar.
He intentado lo siguiente de 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("");
}
});
y esto en mi 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();
}
}
pero el usuario no se le pide que descargue el archivo. Se invoca el método doPost y el servlet recibe los datos, pero ¿se supone que debo extraer el archivo XLSX de la respuesta que recibo en la aplicación GWT? y ¿cómo se supone que debo hacer eso?
agradecería cualquier ayuda o comentarios :)
me encontré con este post: http://stackoverflow.com/questions/7282987/handle-attachment-in-response-with-requestbuilder-in-gwt que podría responder mi pregunta. Voy a probarlo y les permito saber :) (no sé cómo vincular/relacionar el enlace con esta pregunta) –
que acaba de hacerlo :) –