Domanda

Quando il metodo setContentLength viene utilizzato per impostare la lunghezza della risposta con una dimensione più alta superiore rispetto alla dimensione effettiva, perché il contenitore non è automaticamente il calcolo della lunghezza?

Ad esempio,

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

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

Quando ho colpito il servlet, ci vogliono circa mezzo minuto per caricare la pagina, è questo a causa dell'intestazione della lunghezza del contenuto ..?

Qual è la necessità di un metodo del genere?Perché il contenitore non può essere fatto per calcolare la lunghezza della risposta da sola?

È stato utile?

Soluzione

Se si desidera restituire contenuti di grandi dimensioni, spesso non è pratico caricare la risposta completa e inviarlo subito, ma invece caricarlo e inviarlo in blocchi.Poiché la lunghezza viene inviata come parte dell'inizio della risposta, non vi è alcun modo per il contenitore di successivamente cambiarlo.

In questo caso si dici al contenitore che la tua risposta è 100 byte, invii i primi 5 byte (che attiva l'intestazione "Contenuto-lunghezza: 100" da inviare anche), quindi ora il destinatario si aspetterà altri 95 byte.

Ora, d'altra parte, dì che il tuo contenuto era 10 GB, non vorresti prima caricarlo tutto questo in memoria solo così il contenitore calcolerebbe la dimensione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top