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

在appengine-web.xml中使用静态文件声明时,Javascript文件作为HTML文件提供,java,google-app-engine,jsp,Java,Google App Engine,Jsp,我在myappengine 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

我在myappengine 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提供的:

现在,如果我简单地注释掉我上面提到的appengine web.xml中的静态文件部分,一切正常:.js文件都有自己的内容,我没有问题:

我觉得这很奇怪。.js文件甚至不在该静态文件部分指定的目录中。我的appengine web.xml中是否有语法错误,导致出现一些wierd bug


幸运的是,我能够在已部署的应用程序和本地开发服务器上轻松可靠地再现这一点,只需注释appengine web.xml中的静态文件部分。它发生在Chrome和IE中。我正在使用Java appengine

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

我在我的web.xml中有一个过滤器,它编码的目的是,如果用户请求一个页面,但没有登录,就会返回一个特殊的HTML页面。但是,我发现这个过滤器将自己应用于浏览器对.js文件的请求,因此我的过滤器将返回HTML文件而不是.js文件

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


无论如何,我现在确保过滤器只应用于对站点HTML页面的请求,这就解决了这个问题。谢谢你的评论。

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

我在我的web.xml中有一个过滤器,它编码的目的是,如果用户请求一个页面,但没有登录,就会返回一个特殊的HTML页面。但是,我发现这个过滤器将自己应用于浏览器对.js文件的请求,因此我的过滤器将返回HTML文件而不是.js文件

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


无论如何,我现在确保过滤器只应用于对站点HTML页面的请求,这就解决了这个问题。感谢您的评论。

您是否尝试将.js文件的元素添加到标记条目中?另一个想法:将条目添加到web.xml js应用程序/javascript您是否尝试将.js文件的元素添加到标记条目中?另一个想法:将条目添加到web.xml js应用程序/javascript