以编程方式启用 GZIP Tomcat 7(嵌入式)

Posted

技术标签:

【中文标题】以编程方式启用 GZIP Tomcat 7(嵌入式)【英文标题】:Programmatically enable GZIP Tomcat 7 (embedded) 【发布时间】:2013-02-24 15:25:05 【问题描述】:

我正在使用 Tomcat7(嵌入式)

这样的……

String APP_DIR = "ROOT";
Tomcat current = new Tomcat();
File file = new File(APP_DIR);
if (file.isDirectory() && file.canRead()) 
    ctx = current.addWebapp(null, "", file.getAbsolutePath());
    ctx.setSessionCookiePathUsesTrailingSlash(false);

current.start();
ctx.addServletMapping("*.pdf", "jsp", true);

我已启用 *.pdf 映射到 jsp servlet(我在 IE 中遇到的一些问题) 有没有办法使用此配置启用 GZIP(我没有 web.xml,但如果需要我可以添加以使其工作) 到目前为止,我只发现需要将其添加到我的 web.xml 中(我没有!)

<Connector port=”8080″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true”
compression=”on”
compressionMinSize=”2048″
noCompressionUserAgents=”gozilla, traviata”
compressableMimeType=”text/html,text/xml”/>

【问题讨论】:

【参考方案1】:

编辑:根据pieroxy 的评论将属性compressableMimeType 更新为compressibleMimeType

我发现你可以像这样设置属性:

Tomcat current = new Tomcat();
Connector c = this.current.getConnector();
c.setProperty("compression", "on");
c.setProperty("compressionMinSize", "1024");
c.setProperty("noCompressionUserAgents", "gozilla, traviata");
c.setProperty("compressibleMimeType", "text/html,text/xml, text/css, application/json, application/javascript");

我想这也适用于您需要设置的其他连接器属性。

【讨论】:

请注意,在 Tomcat 9 上,compressableMimeType 属性已重命名为 compressibleMimeType,如果您设置了不存在的属性、没有日志、没有警告、什么都没有,tomcat 不会抱怨。我花了一段时间来解决这个问题。请注意,compressibleMimeType 也适用于 Tomcat 7,因此我建议编辑您的回复以使其更具未来性。

以上是关于以编程方式启用 GZIP Tomcat 7(嵌入式)的主要内容,如果未能解决你的问题,请参考以下文章

Spring gzip 与 Tomcat gzip

使用嵌入式 Tomcat 7 在 Spring Boot 中启用 SSL - FileNotFoundException 和 o.a.coyote.http11.Http11NioProtocol 问

如何在 Amazon Beanstalk 和 Tomcat 上启用 HTML/JavaScript/CSS 的 gzip

Tomcat启用GZIP压缩,提升web性能

Tomcat启用Gzip压缩,提升web性能

带有 http/2 和 ssl 的嵌入式 Tomcat 的 Spring Boot 2.1,gzip 不起作用