繁体   English   中英

使用Ajax将数据发布到Java Servlet

[英]Post data with ajax to java servlet

首先,如果我的英语不好,请原谅我。 使用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代码绝对完美。

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

//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>

确实,当我单击链接时,我得到的ZIP文件中带有“ null.txt”。 我怎样才能解决这个问题?

在此先多谢!

尝试这个:

<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;
}

当您单击链接时,不会调用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的文件时创建的,并提供了相应的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM