2013-02-07 27 views
1

我在一些JUnit测试中使用了简单的嵌入式Jetty实例。我可以强制码头*不包括单元测试的Content-Length头部吗?

我想强制Jetty返回一个没有Content-Length头的HTTP响应(正如我们在野外发现某些请求时发生的那样)。

我目前实现的AbstractHandler作为捕获请求的主要方式,然后基于URL中的参数,Jetty返回各种可能的响应,无论是好还是别的。

response.setHeader("Content-Length", null);没有工作,它仍然基于我的身体数据返回有效的内容长度。

回答

2

创建一个javax.servlet.Filter,将HttpServletResponse包装在您的实施中,以防止设置Content-Length标题。

一定要在HttpServletResponseWrapper中实现以下方法。

每个那些可以是一段简单的代码类似于...

@Override 
public void addHeader(String name, String val) 
{ 
    if ("Content-Length".equalsIgnoreCase(name)) 
    { 
     // Ignore content-length from servlets 
     return; 
    } 
    super.addHeader(name,val); 
} 
1

如果你写一些字节或字符到响应,然后刷新,然后写一些其他字节或字符到te响应,它将不得不使用分块传输类型,并且将不能设置内容长度,因为它被迫发送字节而不知道实际写入的长度。