【问题标题】:How do I programmatically set gzip in Jetty?如何以编程方式在 Jetty 中设置 gzip?
【发布时间】:2013-02-22 06:33:32
【问题描述】:

我正在使用 Noir 和 clojure 编写一个使用 Jetty 的网络应用程序。 Jetty 有两种使用 gzip 的方式,一种是静态的,一种是动态的,它们在https://stackoverflow.com/a/9113129/104021 中有描述。我想同时开启静态和动态gzipping,但是我们的项目不使用web.xml文件,也不想启动。

我如何以编程方式设置码头以使用 gzip(即没有 web.xml)?

【问题讨论】:

    标签: clojure jetty embedded-jetty


    【解决方案1】:

    在我正在开发的 Compojure 应用程序中,我有一个基于 ring-jetty-adapter 的 Ring/Jetty 适配器,它以编程方式将 Jetty 配置为使用 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 实例和我的 Ring 处理程序,并使用一些处理程序对其进行设置。请注意,GzipHandlerHandlerWrapper,因此它需要我的(代理)环处理程序并委托给它。我还添加了一个日志处理程序,它将在(gzip 包装的)Ring 处理程序之后执行。

    查看complete working version

    【讨论】:

      【解决方案2】:

      在这里查看 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 将自身广泛用于测试,因此人们需要的大多数嵌入式场景已经存在于某处的单元测试中,当然找到它们可能有点问题:)

      【讨论】:

        猜你喜欢
        • 2014-08-22
        • 1970-01-01
        • 2011-03-15
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 2011-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多