使用Servlet和Javascript导出csv

时间:2012-02-02 19:00:55

标签: javascript servlets csv

我正在开发一个Web应用程序,在某个时刻用户请求服务器(servlet),服务器应该向用户返回一个csv文件。此时我需要向用户显示一个对话框,您可以选择指定要保存csv文件的目录。

在Servlet中我有:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("application/csv");
        response.setHeader("content-disposition","filename=test.csv"); // set the file name to whatever required..
        PrintWriter out = response.getWriter();
        out.println("a,b,c,d,e,f");
        out.println("1,2,3,4,5,6");
        out.flush();
        out.close();
}

在javascript中我有:

            $.get('URL_SERVLET' , function(data) {
            alert("ret: " + data);
        });

下一步是怎么回事?

修改

使用以下简单命令获得了良好的结果:

<a href='http://localhost:8080/MY_SERVLET'> link here </ a>

单击该链接,将自动下载文件test.csv

为了满足我的需要,我需要“href”内容是动态的,只需点击一下按钮即可解雇。

示例:

用户选择名为“radio 1”的无线电组件并单击“Export csv”按钮,这次将动态构建url,例如:“http:// localhost:8080 / MY_SERVLET / csv1”,文件将自动下载(等于上面包含文本“链接在这里”的链接上发生的事情)

有可能吗?

感谢。

3 个答案:

答案 0 :(得分:1)

无法指定下载文件的“目录”,因为:

  1. 协议HTTP只允许您指定文件的名称,然后您无法从Servlet建议目录。尊重下载文件的位置,它取决于浏览器配置,这不是标准的
  2. JavaScript不允许您写入磁盘,然后您无法接收CSV并稍后将其写入磁盘。
  3. 可能的解决方案:

    1. 您可以使用与servlet联系的Applet,然后将该文件写入所需的目录。如果您决定这样做,那么您需要在applet上签名。
    2. 您可以使用Flash,ActiveX等(我不知道这些aproaches的详细信息)

答案 1 :(得分:0)

您无法使用ajax触发另存为对话框。您只需将浏览器导航到下载URL即可。它将检测正确的标题并显示另存为对话框。

答案 2 :(得分:0)

您无法强制使用JavaScript进行另存为对话,因此最终会出现无法使用的响应。您需要使用window.location而不是ajax请求。

window.location = 'URL_SERVLET';