我正在寫一個使用Noir和clojure的web應用程序,它使用Jetty。 Jetty有兩種使用gzip的方式,一種用於靜態,另一種用於動態,它們在https://stackoverflow.com/a/9113129/104021中描述。我想打開靜態和動態gzip,但我們的項目不使用web.xml文件,也不想啓動。如何以編程方式在Jetty中設置gzip?
我如何以編程方式設置碼頭使用gzip(即沒有web.xml)?
我正在寫一個使用Noir和clojure的web應用程序,它使用Jetty。 Jetty有兩種使用gzip的方式,一種用於靜態,另一種用於動態,它們在https://stackoverflow.com/a/9113129/104021中描述。我想打開靜態和動態gzip,但我們的項目不使用web.xml文件,也不想啓動。如何以編程方式在Jetty中設置gzip?
我如何以編程方式設置碼頭使用gzip(即沒有web.xml)?
見這裏的StartServer方法:
碼頭使用自身廣泛的測試,以便大多數嵌入式情況下人們需要已經在單元測試中的某處存在,當然發現他們可以是一個有點問題:)
在我正在開發的Compojure應用程序中,我有一個基於ring-jetty-adapter的Ring/Jetty適配器,它以編程方式將Jetty配置爲使用GzipHandler動態地對內容進行gzip。
(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.)))))))
此功能需要一個Server實例和我的戒指處理程序,並與一些處理程序對其進行設置。需要注意的是GzipHandler
是HandlerWrapper
,所以需要我(代理)環處理,並委託給它。我還添加了一個日誌處理程序,它將在(gzip-wrapped)環處理程序之後執行。