HttpServletResponse 不会将字节流式传输到客户端
HttpServletResponse won't stream bytes to client
我一直在试图找出为什么 Servlet 不会 return 使用此代码将字节发送给客户端(尽管字节是根据日志读取的):
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");
}
};
解决方法是添加 "Content-Length" header.
我一直在试图找出为什么 Servlet 不会 return 使用此代码将字节发送给客户端(尽管字节是根据日志读取的):
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");
}
};
解决方法是添加 "Content-Length" header.