2012-04-13 26 views
6

Jetty kullanan Noir ve clojure kullanarak bir web uygulaması yazıyorum. Jetty'nin gzip kullanmanın iki yolu vardır: biri statik, diğeri dinamik için https://stackoverflow.com/a/9113129/104021. Hem statik hem de dinamik gzipping'ı açmak istiyorum, ancak projemiz web.xml dosyalarını kullanmıyor ve başlamak istemiyor.Gzip'i Jetty'de nasıl programlı olarak ayarlayabilirim?

Programlama yoluyla program aracılığıyla gzip'i (ör. Web.xml kullanmadan) kullanmak için nasıl ayarlanır?

cevap

4

Üzerinde çalıştığım bir Compojure uygulamasında, Jetty'nin dinamik olarak gzip içeriğine bir GzipHandler kullanması için programlı olarak yapılandırdığı ring-jetty-adapter tabanlı bir Ring/Jetty adaptörü var.

(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.))))))) 

Bu fonksiyon, bir Server örneği ve benim Halka işleyicisi alır ve bazı işleyicileri ile kurar. GzipHandler'un HandlerWrapper olduğunu unutmayın, bu yüzden (proxied) Ring işleyicimi ve delegeleri alır. Ayrıca (gzip-wrapped) Halka işleyicisinden sonra çalıştırılacak bir kayıt işleyici ekliyorum.

complete working version'a bakın.

İlgili konular