6

Jetty を使用する Noir と clojure を使用して Web アプリを作成しています。Jetty には、静的用と動的用の 2 つの gzip の使用方法があり、https://stackoverflow.com/a/9113129/104021で説明されています。静的 gzip 圧縮と動的 gzip 圧縮の両方を有効にしたいのですが、私たちのプロジェクトは web.xml ファイルを使用しておらず、開始したくありません。

プログラムで jetty を gzip を使用するように設定するには (つまり、web.xml を使用せずに)、どうすればよいですか?

4

2 に答える 2

4

私が取り組んでいる Compojure アプリには、ring-jetty-adapterに基づく Ring/Jetty アダプターがあり、 GzipHandlerを使用してコンテンツを動的に gzipするように Jetty をプログラムで構成します。

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

この関数は、サーバーインスタンスとリング ハンドラーを受け取り、いくつかのハンドラーを設定します。GzipHandlerは であるHandlerWrapperため、(プロキシされた) Ring ハンドラーとデリゲートを使用することに注意してください。(gzip でラップされた) Ring ハンドラーの後に実行されるロギング ハンドラーも追加します。

完全な作業バージョンをチェックしてください。

于 2012-11-09T23:50:18.913 に答える
1

次の 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 はテストに広く使用されているため、ほとんどの組み込みシナリオは単体テストのどこかに既に存在している必要があります。もちろん、それらを見つけることは少し問題になる可能性があります:)

于 2012-04-16T14:17:35.600 に答える