【问题标题】:Does Accept-Ranges work with RequestBuilder in GWT?Accept-Ranges 是否与 GWT 中的 RequestBuilder 一起使用?
【发布时间】:2014-03-11 10:56:42
【问题描述】:

我正在尝试在 GWT 中使用 RequestBuilder 来查看是否支持 Accept-Ranges。 以下是我的客户端代码:

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 个字节发送到客户端。但是这里整个字符串都被发送了。我在这里做错了什么?我有什么遗漏的吗?

【问题讨论】:

  • 你是对的。我通读了 DefaultServlet 源代码,发现我必须自己评估它。但是,如果没有自动处理并且我必须编写代码来处理它,那么提供这样一个标题的目的是什么?

标签: java servlets gwt http-headers


【解决方案1】:

我觉得我的评论对于其他人来说更具可读性(实际上它是一个):

您没有在您的 servlet 方法中评估范围标头。并且超类HttpServlet 也不评估它(但DefaultServlet 来自Tomcat)。

servlet 规范将大部分实施工作留给了 Apache 等提供商。这就解释了为什么像 HttpServlet 这样的 API 类不做解释特殊 http 头的工作,而是像提到的 Tomcat-DefaultServlet 这样的提供者类。规范的主要目的主要是让不同的实现不强迫人们只做一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    相关资源
    最近更新 更多