我有一个应用程序,它成功地从用户接收输入字符串,在服务器端处理它,并在网页上显示结果。我已将其实现为RemoteServiceServlet,因为这样我可以轻松处理所有网站小工具。
尽管如此,我决定使用“内容处理附件”的可能性,而不是在网页上显示结果,以便用户可以在txt文件中下载已处理的字符串。
有没有办法在不将整个应用程序从RemoteServiceServlet更改为HttpServlet的情况下执行此操作?
在我的代码下面。万分感谢。
ProjectServiceImpl.java
public class ProjectServiceImpl extends RemoteServiceServlet implements ProjectService
{
public String project(String input) throws IllegalArgumentException
{
String output = processString(input);
// Below something I tried to do, but it does not work at all
try {
HttpServletResponse resp = getThreadLocalResponse();
resp.reset();
resp.setContentType("application/octet-stream");
resp.setContentLength(10);
resp.setHeader("Content-disposition", "attachment; filename=\"test.txt\"");
ServletOutputStream op = resp.getOutputStream();
op.write(convertToByteArray(output),0,10);
op.flush();
op.close();
}
catch (IOException e) {
e.printStackTrace();
}
return output;
}
}
ProjectService.java
public interface ProjectService extends RemoteService {
String project(String name) throws IllegalArgumentException;
}
ProjectServiceAsync.java
public interface ProjectServiceAsync {
void project(String input, AsyncCallback<String> callback)
throws IllegalArgumentException;
}
MyProject.java:客户端
[...]
projectService.project(originalString, new AsyncCallback<String>() {
[...]
public void onSuccess(final String result)
{
[...] // Or perhaps should I create here in client-side the txt file with "result"
}
});
答案 0 :(得分:1)
不考虑更改为另一个servlet,而是考虑使用其中一个 - RPC用作传输的XmlHttpRequest不能用于下载文件,但对于几乎所有对服务器的请求仍然非常方便。 XHR仅适用于从javascript到服务器的通信,不能用于下载(或其他东西,例如打开带有内容的新窗口)。
考虑创建另一个servlet,并让RPC调用返回一个字符串,另一个servlet的url(加上可能还有一些其他参数来指示应该下载的内容)。