[英]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.