2012-04-13 11 views
6

Estoy escribiendo una aplicación web usando Noir y clojure, que usa Jetty. Jetty tiene dos formas de usar gzip, una para estática y otra para dinámica, se describen en https://stackoverflow.com/a/9113129/104021. Quiero activar gzipping estático y dinámico, pero nuestro proyecto no utiliza archivos web.xml y no desea iniciar.¿Cómo configuro programáticamente gzip en Jetty?

¿Cómo puedo programáticamente configurar embarcadero para usar gzip (es decir, sin tener un web.xml)?

Respuesta

4

En una aplicación Compojure en la que estoy trabajando, tengo un adaptador Ring/Jetty basado en ring-jetty-adapter que configura programáticamente Jetty para usar un GzipHandler para gzip contenido dinámicamente.

(defn- configurator [server ring-handler] 
    (.setHandler server 
       (doto (new HandlerCollection) 
        (.addHandler (doto (new GzipHandler) 
         (.setHandler (proxy-handler ring-handler)) 
         (.setMimeTypes "text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,text/javascript,image/svg+xml"))) 
        (.addHandler (doto (new RequestLogHandler) (.setRequestLog (NCSARequestLog.))))))) 

Esta función toma una instancia Server y mi manejador de anillo y lo pone al día con algunos controladores. Tenga en cuenta que el GzipHandler es un HandlerWrapper, por lo que toma mi controlador de anillo (proxy) y lo delega. También agrego un controlador de registro que se ejecutará después del controlador de timbre (empaquetado gzip).

Echa un vistazo a complete working version.

Cuestiones relacionadas