Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, mit Java-Servlets gezippten Inhalt zu liefern. Ich habe bereits die App in Betrieb genommen, so dass die erforderlichen Änderungen zu schwer sein sollten.
Ich habe Zugriff auf das Antwortobjekt nur am Ende der doPost / doGet-Methode, also suche ich nach etwas wie
%Vor%Es muss nicht so einfach sein, aber es wäre ideal.
Vielen Dank
Dieser Artikel enthält den vollständigen (und kurzen) Quellcode für ein ServletFilter, der automatisch im laufenden Betrieb komprimiert wird.
Je nach Ihrem Container wird der Container dies höchstwahrscheinlich für Sie tun. Es kann dies automatisch tun oder Sie müssen es manuell konfigurieren, um es für Sie zu tun. Der Vorteil dieser Methode ist, dass keine Codeänderungen vorgenommen werden. Außerdem können Sie je nach Container die Komprimierung abhängig von der Quelle der Anforderung oder vom Quellbrowser bedingt aktivieren / deaktivieren.
Sehen Sie sich für Tomcat das Komprimierungsattribut auf den HTTP-Konfigurationsseiten an ( v5.5 , v6.0 ).
Es gibt grundsätzlich zwei Möglichkeiten:
compression
von Connector
in conf/server.xml
auf on
. response.getOutputStream()
in eine new GzipOutputStream()
und schreiben Sie stattdessen an sie. Der erste Weg betrifft die ganze Webapp, aber das sollte wirklich nicht schaden, es ist fast kein Aufwand und ein großer Gefallen für die Leistung. Und, noch wichtiger, im Gegensatz zu der zweiten Art prüft es tatsächlich die Anforderungsheader, wenn der Client Gzip vor der Verwendung unterstützt. Wenn Sie kopflos auf den 2. Weg gehen, könnten etwa 10% der Internetnutzer nicht auf Ihre Webapplikation zugreifen. Das ist wirklich keine oneliner Aufgabe.
Hier finden Sie hier ein erweitertes Beispiel für eine FileServlet
welche unterstützt unter jedem Gzip und überprüft das anhand der Anforderungsheader. Sie können daraus neue Erkenntnisse gewinnen.
Wenn Sie wirklich, wirklich nicht mehr mit dem Java-Code herumspielen wollen, könnten Sie auch in Erwägung ziehen, einen Apache-Server vor Ihren Servlet-Container zu hängen.
Wenn Sie viel statischen Inhalt haben, könnte dies die Performance für Sie verbessern, da der Apache für statische Seiten etwas schneller ist als jeder Servlet-Container. Sie würden es so konfigurieren, dass nur Servlet-Anfragen an Ihren Servlet-Container auf localhost delegiert werden.
Apache verfügt über praktische integrierte Optionen zum Komprimieren der Ausgabe. Ich kann mich nicht daran erinnern, wie ich sie einstellen soll, aber es ist einfach und vielseitig. Sie verhandelt mit den Browsern darüber, was sie handhaben können und so weiter. Im Zweifelsfall ist Apache in der Regel kompromissloser und aktueller bei Komprimierungsmethoden als jeder Java-Container.
Ich wollte nur wissen lassen, was ich getan habe.
Ich habe einen Wrapper der Anfrageklasse erstellt, der folgendermaßen aussieht:
%Vor% Und dann auf meinem BaseAction
, das ist im Grunde ein TemplateMethod für andere "Aktionen" Ich wickle die Antwort so:
Ich denke, es ist sauber genug. Wenn Sie etwas finden, das verbessert werden kann, lassen Sie es mich wissen. Danke an alle für die Antworten!