Ответ 1
Да, это прекрасный подход - используйте getHeader("Content-Length")
(заглавные буквы) и Long.parseLong(..)
. Я считаю, что это контейнер, но он ограничен int
по спецификации serlvet.
Чтобы иметь дело с большим телом запроса в HTTP POST или PUT, полагаться на HttpServletRequest.getContentLength()
не является хорошей идеей, так как он возвращает только целые значения, или -1 для тел запросa > 2 ГБ.
Однако я не вижу причин, почему не следует допускать более крупные органы запроса. RFC 2616 говорит
Любое содержимое-длина, большее или равное нулю, является допустимым значением.
Можно ли использовать HttpServletRequest.getHeader('content-length')
и проанализировать его на Long вместо?
Да, это прекрасный подход - используйте getHeader("Content-Length")
(заглавные буквы) и Long.parseLong(..)
. Я считаю, что это контейнер, но он ограничен int
по спецификации serlvet.
Начиная с сервлета 3.1 (Java EE 7), доступен новый метод getContentLengthLong()
:
long contentLength = request.getContentLengthLong();
То же самое относится к его аналогу по отклику, setContentLengthLong()
:
response.setContentLengthLong(file.length());