我正在尝试配置Jetty 9服务器以提供压缩的Gzip数据。不幸的是,我找不到适合我的用例的任何描述。 我想我必须使用新的GzipHandler而不是GzipFilter(从Jetty 9.3开始,GzipFilter只是一个假人)。
我的设置是一个WAR文件,它部署在Jetty 9安装上,或者由maven-jetty-plugin运行。所以这不是嵌入式Jetty。
目前我在jetty-env.xml
中只有一个/src/main/resources/META-INF/resources/WEB-INF
。没有其他Jetty相关的配置文件。
我很感激设置,不需要对Jetty安装进行任何更改。因此,应该可以通过WAR文件中的其他配置来启用压缩。
我还想压缩静态(来自/src/main/resources/
和Webjars的文件)和动态(由Jersey生成)内容。
我希望有人已经做了这样的设置并且可以给我一些提示。
此致 约翰内斯
答案 0 :(得分:4)
如果使用jetty-distribution
,请将gzip
模块添加到已配置的${jetty.base}
例如:
$ cd /path/to/mybase
$ java -jar /path/to/jetty-dist/start.jar --add-to-start=gzip
您现在已将GzipHandler
添加到服务器的该配置中。
查看/path/to/mybase/start.ini
的内容以了解配置选项。
自从引入Servlet 3.1及其带来的新Async I / O功能以来,基于GzipFilter
的方法已不再可行。
Jetty中Gzip支持的实现现在基于Container HTTP输出拦截器模式。这意味着必须在WebApp及其GzipHandler
存在之前在Jetty处理程序树中的某个点定义WebAppContext
。
这也意味着您无法通过GzipHandler
或WAR文件中包含的任何内容添加WEB-INF/web.xml
,因为这在添加GzipHandler
的服务器生命周期中已经很晚了
无法从嵌入式GzipHandler
安全地添加WEB-INF/jetty-web.xml
,因为WebAppContext
是您可以安全地从该文件中操作的唯一内容。
您正在部署2个网络应用:foo.war
和baz.war
这是不使用Gzip时的服务器处理程序树...
Server
+-- .getHandler()
+-- HandlerCollection (id="Handlers")
+-- ContextHandlerCollection (id="Contexts")
| +-- WebAppContext "/foo" (foo.war)
| +-- WebAppContext "/baz" (baz.war)
+-- DefaultHandler
当GzipHandler处于混合
时,这是服务器处理程序树Server
+-- .getHandler()
+-- GzipHandler
+-- HandlerCollection (id="Handlers")
+-- ContextHandlerCollection (id="Contexts")
| +-- WebAppContext "/foo" (foo.war)
| +-- WebAppContext "/baz" (baz.war)
+-- DefaultHandler