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

标签 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 应用程序引擎。

最佳答案

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

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

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

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

关于在 appengine-web.xml 中使用静态文件声明时,Javascript 文件将作为 HTML 文件提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14647068/

相关文章:

java - 使用 Ignite V2.0 无法连接 Oracle 并加载数据

java - 使用 TLS 的 Grizzly - 握手问题

javascript - Google App Engine channel 代码在生产中失败,javascript "Cannot read property ' removeEventListener' of undefined "error

html - 在 JSP 的上传表单处理中使用 enctype ="multipart/form-data"时,request.getParameter() 返回 null

java - 如何从arraylist中检索多个值到jsp页面

java - Wicket:当不再选择任何复选框时收到通知

java - 由 :duplicate source for resource: com. my.test.exception.TestException +SonarQube 4.0 +LINUX 引起

google-app-engine - appengine 如何高效地实现对列表的查询?

google-app-engine - 如何从应用引擎追加写入谷歌云存储文件?

java - 使用什么工具或过程来静态分析 JSP?