Mak*_*sim 9 java gwt rpc servlets
我有一个GWT页面,用户输入数据(开始日期,结束日期等),然后这些数据通过RPC调用进入服务器.在服务器上,我想生成带有POI的Excel报告,并允许用户将该文件保存在本地计算机上.
这是我将测试代码流回客户端的测试代码,但出于某种原因,我认为当我使用RPC时,它不知道如何将文件传输到客户端:
public class ReportsServiceImpl extends RemoteServiceServlet implements ReportsService {
public String myMethod(String s) {
File f = new File("/excelTestFile.xls");
String filename = f.getName();
int length = 0;
try {
HttpServletResponse resp = getThreadLocalResponse();
ServletOutputStream op = resp.getOutputStream();
ServletContext context = getServletConfig().getServletContext();
resp.setContentType("application/octet-stream");
resp.setContentLength((int) f.length());
resp.setHeader("Content-Disposition", "attachment; filename*=\"utf-8''" + filename + "");
byte[] bbuf = new byte[1024];
DataInputStream in = new DataInputStream(new FileInputStream(f));
while ((in != null) && ((length = in.read(bbuf)) != -1)) {
op.write(bbuf, 0, length);
}
in.close();
op.flush();
op.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
return "Server says: " + filename;
}
}
Run Code Online (Sandbox Code Playgroud)
我在互联网上的某个地方读过你不能用RPC做文件流,我必须使用Servlet.有没有关于如何使用Servlet以及如何从ReportsServiceImpl调用该servlet的示例.我是否真的需要制作一个servlet,或者可以使用我的RPC将其传回去?
Sri*_*nan 14
你必须制作一个常规的Servlet,你不能从中传输二进制数据ReportsServiceImpl.此外,无法从ReportsServiceImpl调用servlet - 您的客户端代码必须直接调用servlet.
在客户端,您必须使用通过查询字符串传递的参数创建常规锚链接.有点像<a href="http://myserver.com/myservlet?parm1=value1&.."</a>.
在服务器端,将代码移动到标准的Servlet,不会继承RemoteServiceServlet.从请求对象中读取参数,创建excel并将其发送回客户端.浏览器将自动弹出文件下载对话框.