在appengine-web.xml中使用静态文件声明时,Javascript文件将作为HTML文件提供

时间:2013-02-01 13:11:49

标签: java google-app-engine jsp

我在 appengine-web.xml 中使用以下内容在appengine中启用了静态图像文件的缓存:

<static-files>
<include path="/css/images/**.gif" expiration="1d" />
    <include path="/css/images/**.png" expiration="1d" />
    <include path="/css/images/wind_pointers/*.png" expiration="7d" />
    <include path="/css/images/**.jpg" expiration="1d" />
    <include path="/errors/*" />
</static-files>

这很有效,直到我发现了一个奇怪的副作用:有时,appengine提供了一个包含HTML页面内容的JavaScript文件,结果是我得到了大量的JavaScript错误,因为JavaScript解释器正在被输入HTML而不是JS:

JavaScript errors caused by .js file served up with HTML content

现在,如果我只是注释掉上面提到的 appengine-web.xml 中的 static-files 部分,那么一切正常:.js文件已提供有自己的内容,我没有问题:

Javascript files are served up correctly.

这对我来说似乎很奇怪。 .js文件甚至不在 static-files 部分中指定的目录中。我的 appengine-web.xml 中的语法错误是否会导致某些奇怪的错误显示?

幸运的是,我只需在 appengine-web.xml中注释 static-files 部分,就可以在部署的应用程序和我的本地开发服务器上轻松可靠地重现这一点。 即可。它发生在Chrome和IE中。我正在使用Java appengine。

1 个答案:

答案 0 :(得分:1)

我已经设法弄清楚发生了什么:

我的 web.xml 中有一个过滤器,其编码意图是如果用户请求了一个页面但未登录则会返回一个特殊的HTML页面。但是,我找到了此过滤器将自身应用于浏览器对 .js 文件的请求,因此我的过滤器将返回HTML文件而不是.js文件。

奇怪的是,当从 appengine-web.xml 中删除 部分时,我没有遇到此问题。如果没有该部分,AppEngine将恢复默认行为,根据文档将所有文件视为静态,在这种情况下,我希望问题始终发生。此外,有时会返回 .js ,有时HTML会返回 - 这似乎是某个地方的竞争条件。这对我来说仍然是一个谜。

无论如何,我现在确保过滤器仅应用于网站HTML页面的请求,这解决了这个问题。感谢您的所有意见。