我有一个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,length); } in.close(); op.flush(); op.close(); } catch (Exception ex) { ex.printstacktrace(); } return "Server says: " + filename; } }
我已经在互联网上的某个地方看过,你不能用RPC做文件流,我必须使用Servlet.有没有关于如何使用Servlet以及如何从ReportsServiceImpl调用该servlet的示例.我真的需要制作一个servlet,或者可以使用我的RPC将其流式传输?
解决方法
你必须做一个常规的Servlet,你不能从ReportsServiceImpl流二进制数据.此外,没有办法从ReportsServiceImpl调用servlet – 您的客户端代码必须直接调用servlet.
在客户端,您必须使用通过查询字符串传递的参数创建一个正常的锚点链接.像< a href =“http://myserver.com/myservlet?parm1 = value1& ..”< / a> ;. 在服务器端,将您的代码移动到标准的Servlet,而不是从RemoteServiceServlet继承.从请求对象读取参数,创建excel并将其发送回客户端.浏览器将自动弹出文件下载对话框.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。