java AcceptRanges在GWT中与RequestBuilder一起工作吗?
我试图在GWT中使用RequestBuilder来查看是否支持接受范围。 以下是我的客户代码:
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,pathToServlet);
builder.setHeader("Range","bytes=0-10");
RequestCallback callback = new RequestCallback() {
@Override
public void onError(Request arg0, Throwable arg1) {
}
@Override
public void onResponseReceived(Request req, Response res) {
log.info("Text:"+res.getText());
log.info("Code:"+res.getStatusCode());
}
};
try {
builder.sendRequest(null, callback);
} catch (RequestException e) {}
我的servlet代码只是一个简单的测试代码:
public class RangeTest extends HttpServlet{
static Logger log = Logger.getLogger(RangeTest.class);
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String output = new String("This is a test string to be sent to the client");
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println(output);
}
}
在我从客户端获得的输出中,打印了以下内容:
Text:This is a test string to be sent to the client
Code:200
我所期望的是,由于我在请求中将范围标头设置为0-10,因此只有前10个字节将被发送到客户端。但是这里整个字符串都被发送了。我做错了什么?有什么我错过的吗
# 1 楼答案
我觉得我的答案更具可读性:
您没有在servlet方法中评估范围标头。而且超类
HttpServlet
也不计算它(但是DefaultServlet
来自Tomcat)servlet规范将大部分实现工作留给了Apache等提供商。这就解释了为什么像
HttpServlet
这样的API类不解释特殊的http头,而是解释像前面提到的Tomcat DefaultServlet这样的提供程序类。规范的主要目的是使不同的实现不会强迫人们只使用一个