我创建了一个servlet来下载一个特定的文本,客户端发布之前的文本(在textarea中)...客户端的表单没什么特别的:
form = new FormPanel();
form.setMethod(FormPanel.METHOD_POST);
form.setAction(GWT.getModuleBaseURL() + "services/export");
exportButton = new Button(resource.SUBMENU_Export(), new ClickHandler() {
public void onClick(ClickEvent event) {
form.submit();
}
});
这是服务器端的代码(serlvet):
package com.server.servlet;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ExportServlet extends HttpServlet implements Servlet {
private static final long serialVersionUID = 7526472295622776147L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
String expl = req.getParameter("Expl");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=hint.txt;");
OutputStream stream = response.getOutputStream();
ObjectOutputStream objectStream = new ObjectOutputStream(stream);
objectStream.writeObject(expl);
objectStream.flush();
}
}
但是当我打开下载的文件时,文件的开头只有意外的字符:
"`¬í tč-`"
将这些字符写入我的文件时,我不知道......
答案 0 :(得分:3)
ObjectOutputStream
用于序列化"任意" Java对象转换为二进制数据格式,使用ObjectInputStream
可以轻松地从另一个Java程序读取。听起来不像那样你只想输出一些文字。最简单的方法是:
OutputStream stream = response.getOutputStream();
stream.write(expl.getBytes("UTF-8"));
如果您要编写更多的文本数据,则可以使用Writer:
OutputStream stream = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8");
writer.write(expl);
writer.flush(); // flush text data from writer to stream
输出流用于发送任意二进制数据,这可能是您想要的,也可能不是。在上面,流保持打开状态,因此您可以在文本后添加更多数据。如果您的所有输出都是文字,那么您也可以将内容类型设置为text/plain
并改为使用response
编写者:
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.write(expl);
请注意,网络容器会自动关闭作者和流,因此您不必自己关闭。