使用ajax将数据发布到java servlet

时间:2013-10-13 13:29:30

标签: java jquery ajax servlets post

首先,如果我的英语不好,请原谅我。我在使用ajax将数据发送到ExportServlet时遇到了一些问题。

ExportServlet.java

public class ExportServlet extends HttpServlet {
private static final long serialVersionUID = 6715605810229670146L;

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    String fileName = req.getParameter("filename");

    //Create ZIP file
    try {
        res.setContentType("applicatin/zip");
        res.setStatus(HttpServletResponse.SC_OK);

        ZipOutputStream zos = new ZipOutputStream(res.getOutputStream());

        //Create TXT file
        zos.putNextEntry(new ZipEntry(fileName + ".txt"));
        zos.write(getOutputData());
        zos.closeEntry();

        zos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private byte[] getOutputData() {
    byte[] result = null;
    String tmp = "Text file content";
    result = tmp.getBytes();
    return result;
}
}

上面的java代码绝对完美。

然后我有我的ajax代码将数据发送到我的ExportServlet(我使用了文件名作为例子):

//Post data to ExportServlet
        $.ajax({
            type: 'post',
            url: '/export.zip',
            data: "filename = myFile",
            success:function(data){alert(data);},
            error:function(){alert('error');}
        });

问题是当触发ajax函数时,我得到一个错误回调。我还有一个链接来下载ExportServlet生成的ZIP文件:

<a href="/export.zip">Download file</a>

事实上,当我点击链接时,我会在其中获得带有“null.txt”的ZIP文件。我该如何解决这个问题?

提前多多谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

<a href="javascript:;" onclick="downloadFile();">Download file</a>
<div style="display: none;">
   <iframe id="downloadFileFrame"></iframe>
</div>


function downloadFile() {
    $('#downloadFileFrame').attr('src','/export.zip?filename=myFile');
    return false;
}

答案 1 :(得分:0)

当您单击链接时,将不会调用ajax代码,因此filename参数不会包含在对servlet的请求中。 servlet将使用filename = null执行。这是你得到的实际结果。

要解决此问题,我认为您必须在第一次加载页面时调用ajax代码,以便您的servlet可以创建文件并将其放在服务器上。然后你必须在链接中传递filename参数,例如:

<a href="http://yourdomain.com/downloadFile?filename=myFile">Download file</a>

downloadFile servlet将查找名为myFile.txt的文件,该文件是在您第一次使用ajax调用时创建的,并在回复时为您提供该文件。