Je me demandais s'il y avait un facile em> moyen de servir du contenu gzippé avec des servlets Java. J'ai déjà l'application et que les modifications nécessaires devraient être trop lourdes. J'ai accès à l'objet de réponse juste à la fin de la méthode Dopost / Doket, donc je recherche quelque chose comme p> response.setGzip(true);
7 Réponses :
Regardez la classe GzipOutPutStream. Quelque chose comme ceci: puis utilisez l'écrivain comme vous le faites habituellement. P> p>
Voir la solution de Jonathan Feinberg :)
Selon votre conteneur, le conteneur le fera probablement probablement pour vous. Cela peut le faire automatiquement ou vous devrez peut-être le configurer manuellement pour le faire pour vous. L'avantage de cette méthode est le changement de code zéro. Et, encore une fois, en fonction du conteneur, vous pouvez activer / désactiver / désactiver la compression en fonction de l'emplacement de la demande ou du navigateur source. P>
Pour Tomcat, consultez l'attribut de compression sur les pages de configuration http ( V5.5 , v6.0 a>). p>
Si vous voulez vraiment, vous ne voulez vraiment pas vouloir avec le code Java, vous pouvez également envisager d'accrocher un serveur Apache devant votre conteneur de servlet. P>
Si vous avez beaucoup de contenu statique, cela pourrait réellement améliorer les performances pour vous, car l'Apache sera un peu plus rapide pour les pages statiques que tout conteneur de servlet. Vous devez donc le configurer pour déléguer uniquement des demandes de servlet à votre conteneur de servlet sur localhost. P>
Apache a une option intégrée pratique pour la sortie de compression. Je ne me souviens pas comment les mettre, mais c'est facile et polyvalent. Il négocie avec des navigateurs sur ce qu'ils peuvent gérer, etc. En cas de doute, Apache sera généralement plus averti et à jour sur des méthodes de compression que tout conteneur Java. P>
Il y a essentiellement 2 façons: p>
conf / server.xml code> à sur code> sur code >. li>
- enveloppe le
réponse.getoutoutToutPutStream () code> dans un nouveau gzipoutputtretream () code> et écrivez-y à la place. Li>
ul>
La première voie affecte l'ensemble de la webApp, mais cela ne devrait vraiment pas faire mal, c'est presque zéro effort et une grande faveur pour la performance. Et, plus important encore, par opposition à la seconde façon, il vérifie réellement les en-têtes de la demande si le client prend en charge forte> gzip avant de l'utiliser. Lorsque vous optez pour la 2e méthode sans houe, environ 10% des utilisateurs Web mondiaux ne seraient pas en mesure d'accéder à votre application WebApplication. Ce n'est vraiment pas une tâche de l'onairiner. P>
Vous pouvez trouver ici un exemple avancé d'un FileServlet code> qui prend en charge sous chaque gzip et vérifie que sur la base des en-têtes de demande. Vous pouvez obtenir de nouvelles idées. P>
J'ai vu des filtres de servlets aussi pour le faire? Troisième voie? Qui devrait être préféré?
@ User01: Les filtres de servlet font cette 2e façon (de manière réutilisable générique sans la nécessité de la logique de Copypaste sur tous les servlets). Omniface a un: showcase.omnifaces.org/filters/gziPResponsefilter
Merci pour le commentaire rapide! Donc, 1er devrait être un moyen préféré d'activer GZIP pour toutes les ressources de l'application Web?
@ user01: Si possible, oui, c'est généralement préféré. Mais un filtre offre une configuration / configuration à grains plus fine du côté webapp sur.
Si vous êtes sur Tomcat, le connecteur peut faire de la compression pour vous. Ceci est ma configuration, si vous exécutez Apache httpd devant Tomcat, vous devez utiliser mod_gzip, qui fait un travail bien meilleur. P> P>
Je voulais juste vous faire savoir ce que j'ai terminé.
J'ai fait une enveloppe de la classe de demande qui ressemble à ceci: p> puis sur mon < Code> Base Code>, qui est fondamentalement un tempplateMethod pour d'autres "actions" Je enveloppe la réponse comme ceci: p> Je pense que c'est assez propre. Si vous trouvez quelque chose qui peut être amélioré, merci de me le faire savoir. Merci tout le monde pour les réponses! P> p>
Cela n'enlève pas la partie la plus importante, à savoir la sortie.
C'est ce que j'ai utilisé tout en apprenant sur des servlets. Peut-être pas utilement, mais travailler !!!
Code ci-dessous dans