2012-04-13 34 views
6

Tôi đang viết một ứng dụng web bằng Noir và clojure, sử dụng Jetty. Jetty có hai cách sử dụng gzip, một cho tĩnh và một cho động, chúng được mô tả trong https://stackoverflow.com/a/9113129/104021. Tôi muốn bật cả gzipping tĩnh và động, nhưng dự án của chúng tôi không sử dụng tệp web.xml và không muốn bắt đầu.Làm cách nào để lập trình gzip trong Jetty?

Làm cách nào để lập trình thiết lập cầu cảng để sử dụng gzip (tức là không có tệp web.xml)?

Trả lời

1

Xem phương pháp startServer ở đây:

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

cầu cảng sử dụng riêng của mình rộng rãi để thử nghiệm nên kịch bản nhúng hầu hết mọi người cần đã tồn tại trong các bài kiểm tra đơn vị nơi nào đó, dĩ nhiên việc tìm kiếm chúng có thể là một chút của một vấn đề :)

4

Trong ứng dụng Compojure tôi đang làm việc, tôi có bộ điều hợp Ring/Jetty dựa trên ring-jetty-adapter, theo đó lập trình cấu hình Jetty để sử dụng một nội dung gzip động 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.))))))) 

chức năng này có một trường hợp Server và handler nhẫn của tôi và đặt nó lên với một số bộ xử lý. Lưu ý rằng GzipHandler là một số HandlerWrapper, vì vậy, phải xử lý Ring (proxy) của tôi và ủy quyền cho nó. Tôi cũng thêm một trình xử lý ghi nhật ký sẽ được thực thi sau trình xử lý Ring (gzip-wrap).

Khám phá complete working version.

Các vấn đề liên quan