Frage

Wenn der setContentLength methode wird verwendet, um die Länge der Antwort mit einer höheren Größe festzulegen, die höher als die tatsächliche Größe ist. Warum berechnet der Container die Länge nicht automatisch?

beispielsweise,

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

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

Wenn ich auf das Servlet drücke, dauert es ungefähr eine halbe Minute, um die Seite zu laden..?

Was ist die Notwendigkeit für eine solche Methode?warum kann der Container nicht dazu gebracht werden, die Länge der Antwort selbst zu berechnen?

War es hilfreich?

Lösung

Wenn Sie große Inhalte zurückgeben möchten, ist es oft nicht praktikabel, die vollständige Antwort zu laden und sofort zu senden, sondern sie in Blöcken zu laden und zu senden.Da die Länge als Teil des Anfangs der Antwort gesendet wird, kann der Container sie später nicht mehr ändern.

In diesem Fall teilen Sie dem Container mit, dass Ihre Antwort 100 Bytes umfasst, und senden die ersten 5 Bytes (was den Header "Content-Length" auslöst:100 " auch gesendet werden), so dass der Empfänger nun weitere 95 Bytes erwartet.

Wenn Sie andererseits annehmen, dass Ihr Inhalt 10 GB groß ist, möchten Sie nicht zuerst all das in den Speicher laden, nur damit der Container die Größe berechnet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top