簡體   English   中英

如何在Jetty中以編程方式設置gzip?

[英]How do I programmatically set gzip in Jetty?

我正在使用Noir和clojure編寫一個Web應用程序,它使用Jetty。 Jetty有兩種使用gzip的方法,一種用於靜態,一種用於動態,它們在https://stackoverflow.com/a/9113129/104021中有描述。 我想打開靜態和動態gzipping,但我們的項目不使用web.xml文件,也不想啟動。

如何以編程方式設置jetty以使用gzip(即沒有web.xml)?

在我正在研究的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實例和我的Ring處理程序,並用一些處理程序設置它。 請注意, GzipHandler是一個HandlerWrapper ,所以它需要我的(代理)Ring處理程序和委托給它。 我還添加了一個日志處理程序,它將在(gzip-wrapped)Ring處理程序之后執行。

查看完整的工作版本

請參閱此處的startServer方法:

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/GzipWithPipeliningTest.java

jetty廣泛用於測試,所以大多數嵌入式場景人們需要已經存在於某個地方的單元測試中,當然找到它們可能有點問題:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM