【发布时间】:2014-04-14 16:53:20
【问题描述】:
如果请求包含包含“gzip”的 Accept-Encoding 标头,我编写了一个简单的 JSP 以返回 JavaScript 文件的压缩版本,否则返回解压缩版本。
<%@ page language="java"%>
<%
boolean zipVersionRequired = false;
try
{
String acceptEncodingHeader = request.getHeader("Accept-Encoding");
if (acceptEncodingHeader != null && acceptEncodingHeader.indexOf("gzip") != -1)
{
zipVersionRequired = true;
response.setHeader("Content-Encoding", "gzip");
}
response.setHeader("Content-Type", "text/javascript");
}
catch (java.lang.Throwable t)
{
}
%>
<% if (zipVersionRequired == true) {
%>
<jsp:forward page="/files/zipped/f1.js.gz"/>
<% } else {
%>
<jsp:forward page="/files/unzipped/f1.js"/>
<%
}
%>
需要注意的一点是,我将 Content-Type 设置为“text/javascript”,但根据我的浏览器,该响应标头的值是“application/x-gzip”——不确定在哪里设置。 Content-Encoding 响应标头设置为“gzip”。在 Chrome 开发者工具中,响应本身看起来像一堆奇怪的符号,所以我假设浏览器没有解压缩响应。
我编写了一个 servlet 来完成相同的工作 - 它根据 Accept-Encoding 请求标头读取压缩或解压缩文件的内容并将内容写回客户端。该 servlet 工作正常,但我想知道我在 JSP 版本中做错了什么。
我正在使用 Tomcat 网络服务器,但请不要建议将连接器上的 compression=on 设置作为此处任何事情的解决方案,因为在这种情况下这不是一个选项。
谢谢,
保罗
【问题讨论】:
-
在你的第一个 <jsp:forward.../> 对我来说没有意义。不应该是
<jsp:include.../>吗?