Pregunta

Cuando el setContentLength El método se utiliza para establecer la longitud de la respuesta con un tamaño mayor que el tamaño real, ¿por qué el contenedor no calcula automáticamente la longitud?

por ejemplo,

String s = "hello";
byte[] b = s.getBytes();

response.setContentLength(100);
response.getOutputStream().write(b);
response.flush();

Cuando llego al servlet, la página tarda aproximadamente medio minuto en cargarse. ¿Esto se debe a la longitud del encabezado del contenido?

¿Cuál es la necesidad de tal método?¿Por qué no se puede hacer que el contenedor calcule la longitud de la respuesta por sí solo?

¿Fue útil?

Solución

Si desea devolver contenidos grandes, a menudo no es práctico cargar la respuesta completa y enviarla de una vez, sino cargarla y enviarla en partes.Dado que la longitud se envía como parte del comienzo de la respuesta, no hay forma de que el contenedor la cambie más adelante.

En este caso le dices al contenedor que tu respuesta es de 100 bytes, envías los primeros 5 bytes (lo que activa el encabezado "Content-Length:100" también se enviarán), por lo que ahora el destinatario esperará otros 95 bytes.

Ahora, por otro lado, digamos que su contenido tiene 10 GB, no querrá cargar todo eso primero en la memoria solo para que el contenedor calcule el tamaño.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top