Question

Lorsque l' setContentLength méthode est utilisée pour définir la longueur de la réponse, avec un accroissement de la taille est supérieure à la taille réelle, pourquoi le conteneur non automatique de calcul de la longueur?

par exemple,

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

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

Quand j'ai frappé à la servlet, il faut environ une demi-minute pour charger la page, est-ce à cause de la longueur du contenu de l'en-tête..?

Qu'est-ce que la nécessité d'une telle méthode?pourquoi je ne peux pas le contenant doivent être faites pour calculer la longueur de la réponse par lui-même?

Était-ce utile?

La solution

Si vous souhaitez retourner un grand contenu, il n'est souvent pas pratique pour charger de te réponse complète et de l'envoyer à la fois,mais au lieu de la charge et de l'envoyer dans les morceaux.Puisque la longueur est envoyé dans le cadre du début de la réponse, il n'existe aucun moyen pour le conteneur à plus tard sur le changer.

Dans ce cas, vous dire le récipient que votre réponse est de 100 octets, vous envoyer les 5 premiers octets (ce qui déclenche l'en-tête "Content-Length:100" pour être envoyé), alors maintenant, le bénéficiaire devra s'attendre à un autre 95 octets.

Maintenant, d'autre part, dire que votre contenu est de 10 go, vous ne voulez pas d'abord de charger tous que dans la mémoire juste pour le conteneur de calculer la taille.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top