微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GWT的RemoteServiceServlet可以在HttpServletResponse中写入文件流吗?

如何解决GWT的RemoteServiceServlet可以在HttpServletResponse中写入文件流吗?

| 我有一个扩展RemoteServiceServlet的类。此类有几种方法,在一种方法中,我使用getThreadLocalResponse()获取当前调用的HttpServletResponse,然后在响应中写入File。这是代码
File aFile = new File(\"c://test.txt\");
int iBufferSize = 1000;
int iLength = 0;

HttpServletResponse resp = getThreadLocalResponse();

ServletoutputStream op = resp.getoutputStream();
ServletContext context = getServletConfig().getServletContext();
String mimetype = context.getMimeType(aFile.getName());

resp.setContentType((mimetype != null) ? mimetype : \"application/octet-stream\");
resp.setContentLength((int) aFile.length());
resp.setHeader(\"Content-disposition\",\"attachment; filename=\\\"\" + aFile.getName() + \"\\\"\");

byte[] xbuf = new byte[iBufferSize];
DataInputStream in = new DataInputStream(new FileInputStream(aFile));

while ((in != null) && ((iLength = in.read(xbuf)) != -1))
{
  op.write(xbuf,iLength);
}

in.close();
op.flush();
op.close();
但是,总是会发生错误。调试之后,我发现写入响应时会抛出异常。 我不重写doGet和doPost,因为还有其他一些方法,我不希望对类的每个请求都可以调用这段代码。 但是,如果我创建一个单独的Servlet或在此类中重写doGet或doPost,它将正常工作。 有人知道为什么吗?当我们使用getThreadLocalResponse()时,GWT RemoteServiceServlet是否支持在响应中编写Stream? 谢谢!     

解决方法

        您是否将此代码放在RemoteServiceServlet的GWT-RPC方法中? 如果是,那么您正在尝试将GWT-RPC与您自己的某些内容混合使用,这是不允许的。您不能只将任意数据写入http响应,因为这显然会弄乱RPC协议。 OTOH,如果您只是将自己的一些方法与GWT-RPC方法并排放置,那么为什么不创建一个新的Servlet? AFAIK,GWT-RPC使用http POST,因此覆盖doGet()应该适合您的功能,并使GWT-RPC起作用。但是重写doPost()将破坏GWT-RPC。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。