2012-04-13 4 views
6

Я пишу веб-приложение с использованием Noir и clojure, в котором используется Jetty. Jetty имеет два способа использования gzip: один для статического и один для динамического, они описаны в https://stackoverflow.com/a/9113129/104021. Я хочу включить статический и динамический gzipping, но наш проект не использует файлы web.xml и не хочет запускаться.Как программно установить gzip в Jetty?

Как сделать программным путем set jetty для использования gzip (т.е. без наличия web.xml)?

ответ

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

молы использует себя широко для тестирования поэтому большинство встроенных сценариев люди должны уже существовать в единичных тестах где-то, конечно, найти их может быть немного вопрос :)

4

В приложении Compojure, над которым я работаю, у меня есть адаптер Ring/Jetty на основе ring-jetty-adapter, который программным образом настраивает Jetty для использования динамического содержимого gzip для GzipHandler.

(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, поэтому он принимает мой (проксированный) Ring-обработчик и делегирует его. Я также добавляю обработчик каротажа, который будет выполняться после обработчика Ring (gzip-wrapped).

Проверьте complete working version.

Смежные вопросы