【发布时间】:2013-10-21 03:59:43
【问题描述】:
首先,如果我的英语不好,请原谅我。我在使用 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 文件。我该如何解决这个问题?
非常感谢!
【问题讨论】:
-
你只为你的servlet实现了
doGet,而不是doPost。 -
还有一点:你不能使用 ajax 触发文件下载。想象一下,一个恶意服务器在未经您许可的情况下开始将文件和应用程序下载到您的计算机中。
-
是的,我知道,问题是当我将 doGet 更改为 doPost 时,我无法再下载该文件(ahref 不起作用)。我不想触发文件下载,我只想触发 ExportServlet 用 ajax 创建文件。然后当你点击下载文件链接时,它会下载创建的文件。
-
请阅读我的第二条评论。
-
来吧,伙计,在 ajax 中,您使用
POST方法请求数据,而您刚刚在 servlet 中实现了GET方法。所以你给我一杯咖啡:D
标签: java jquery ajax servlets post