javax.servlet.HttpServletRequest.getContentLength()仅返回int

时间:2011-09-14 21:36:45

标签: java servlets

为了处理HTTP POST或PUT中的大型请求主体,依赖HttpServletRequest.getContentLength()不是一个好主意,因为它只返回整数值,或者对于请求主体返回-1> 2GB。

但是,我认为没有理由,为什么不应该允许更大的请求机构。 RFC 2616说

  

任何大于或等于零的Content-Length都是有效值。

使用HttpServletRequest.getHeader('content-length')并将其解析为Long是否有效?

2 个答案:

答案 0 :(得分:9)

是的,这是一个很好的方法 - 使用getHeader("Content-Length")(大写)和Long.parseLong(..)。我相信这是容器正在做的事情,但它仅限于int的serlvet规范。

答案 1 :(得分:9)

从Servlet 3.1(Java EE 7)开始,可以使用一种新方法getContentLengthLong()

long contentLength = request.getContentLengthLong();

同样适用于回复的对应方setContentLengthLong()

response.setContentLengthLong(file.length());