【问题标题】:HttpServletResponse won't stream bytes to clientHttpServletResponse 不会将字节流式传输到客户端
【发布时间】:2017-07-22 06:36:35
【问题描述】:

我一直试图弄清楚为什么 Servlet 不会使用此代码将字节返回给客户端(尽管字节是根据日志读取的):

Redirector redirector = new SelfInjectingRedirector(getContext(), targetPattern,
        Redirector.MODE_SERVER_OUTBOUND){

    @Inject
    FileStore fileStore;

    String fileName = "something_for_sample";
    boolean isBufferFirst = true;

    @Override
    public void handle(Request request, Response response) {
        try {
            HttpServletRequest servletRequest = ServletUtils.getRequest(request);
            HttpServletResponse servletResponse = ServletUtils.getResponse(response);
            //
            // Either statement here wont return the bytes to the client
            // 
            if(isBufferFirst) {
                byte[] bytes = fileStore.get(fileName);
                System.out.println("Bytes read: " + bytes.length); // Bytes read: 5731
                servletResponse.getOutputStream().write(bytes, 0, bytes.length)
            } else {
                fileStore.get(fileName, servletResponse.getOutputStream());
            }
        } catch (Exception e) {
            response.setStatus(Status.SERVER_ERROR_INTERNAL);
            e.printStackTrace();
        }
        System.out.println("Handle Done");
    }

};

【问题讨论】:

  • 这是类层次结构“SelfInjectingRedirector extends Redirector”和“Redirector extends Restlet”,如 org.restlet.Restlet
  • 由于这没有使用任何标准,因此真的无法判断。什么是“回应”?什么是“ServletUtils”?什么是 FileStore?
  • 它是 Restlet(见标签)

标签: java servlets restlet


【解决方案1】:

解决方案是添加“Content-Length”标头。

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多