Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过gwt(http get)从servlet开始下载_Java_Gwt_Servlets_Get_Httprequest - Fatal编程技术网

Java 通过gwt(http get)从servlet开始下载

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"

我想从我的gwt web应用程序中的clickevent开始文件下载。因此,我编写了一个Servlet,它将数据写入输出并开始下载。数据通过http get接收

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", "");