Java 通过gwt(http get)从servlet开始下载
我想从我的gwt web应用程序中的clickevent开始文件下载。因此,我编写了一个Servlet,它将数据写入输出并开始下载。数据通过http get接收Java 通过gwt(http get)从servlet开始下载,java,gwt,servlets,get,httprequest,Java,Gwt,Servlets,Get,Httprequest,我想从我的gwt web应用程序中的clickevent开始文件下载。因此,我编写了一个Servlet,它将数据写入输出并开始下载。数据通过http get接收 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = request.getParameter("data"
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data = request.getParameter("data");
String filename = request.getParameter("filename");
byte[] streamData = data.getBytes();
response.setContentType("application/force-download");
response.setHeader("Content-Disposition", "attachment; fileName="
+ filename + ".csv");
response.setContentLength(streamData.length);
ServletOutputStream out = response.getOutputStream();
out.write(streamData);
out.flush();
}
在客户端中,我通过requestBuilder.sendRequest()启动get方法:
什么也没发生。但是为什么呢?浏览器不应该要求开始下载吗
在这种情况下,我使用post或get有关系吗
我不想用这样的东西
Window.open("/download?data=myData&filename=filename", "_blank", "");
有什么想法吗?在客户端,使用锚而不是请求生成器,并直接调用servlet。servlet只会将检索到的请求参数返回到响应体中(可能使用错误的字符编码)。那么,servlet的全部用途是什么?我不做GWT,但你为什么不直接把它写到它的响应中呢?@BalusC:问题是所有GWT Java代码都被翻译成JavaScript,并且不支持
Java.io.*
,所以我必须使用Servlet。但您的编码是正确的,在我的情况下,我应该使用“text/csv”。(但实际上“应用程序/强制下载”也可以)Re-GWT:好的。重新编码:不,我指的是您需要在String#getBytes()
和HttpServletResponse#setCharacterEncoding()
中指定的字符编码。不指定字符编码将导致使用平台默认编码,如果最初未使用相同编码,则可能会导致字符格式错误。好的,谢谢您的提示。但我还没有明白:编码会导致Servlet平台的默认设置吗?还是发送客户端(我的smartgwt客户端)的编码?是的,就是这样。我不知道为什么requestBuilder.sendRequest()
不起作用,但Anchor起作用。实际上,我现在使用post方法和FormPanel来代替锚定。。。
Window.open("/download?data=myData&filename=filename", "_blank", "");