Tomcat 每 10 分钟重新加载一次 JS 资源
Tomcat reloads JS resources only every 10 minutes
我正在使用 Eclipse 和 Tomcat 在 Web 应用程序上工作。我使用 Eclipse 将我的代码更改自动部署到 Tomcat。它适用于 Java 类:当我对 .java 文件进行更改时,我可以立即看到它反映在 Web 应用程序上,而无需重新启动 Tomcat(因为只要它在调试模式下是 运行。
但是对于 JS 文件,我必须停止 Tomcat,通过 Tomcat 的 "Add and remove" 菜单,删除我的 WAR 文件,单击确定,将它们添加回来然后再次单击确定并重新启动 Tomcat 以查看更改。简单的重启或清理无法解决问题。我真的需要删除项目并重新添加它们。
更糟糕的是它曾经有效。您知道是什么原因造成的吗?
这是我的 Tomcat 配置:
你看有什么不对吗?我可以提供更多信息吗?
=== 编辑 ===
我检查了 Eclipse 为 Tomcat 复制资源的地方,似乎 JS 文件已更新。所以这意味着 Eclipse 正确地完成了将资源复制到目标的工作。 Tomcat 未选取更改。
=== 另一个编辑 ===
我们的应用程序中有一个内部缓存。我停用并清除了它,但它并没有解决问题。它不太可能来自那里。
此外,由于我遇到了这个问题,我已经看到两次 Tomcat 接受我的更改,但只有在我很久以后回到应用程序时才看到...
=== 一些新信息===
看来 Tomcat 终于接受了更改...但仅在 10 分钟后。
=== 这也不是 Eclipse 问题 ===
现在很清楚这不是 Eclipse 问题:我从命令行启动 Tomcat,使用与 Eclipse 相同的参数。
这是我使用的命令行:
/home/antoine/opt/java/jdk1.8.0_25/bin/java -Dcatalina.base=/home/antoine/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 -Dcatalina.home=/home/antoine/opt/java/apache-tomcat-8.0.15 -Dwtp.deploy=/home/antoine/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps -Djava.endorsed.dirs=/home/antoine/opt/java/apache-tomcat-8.0.15/endorsed -Djavax.net.ssl.trustStorePassword=somepassword -Djavax.net.ssl.trustStore=/home/antoine/opt/java/apache-tomcat-8.0.15/my.keystore -Xms512m -Xmx1024m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8 -classpath /home/antoine/opt/java/apache-tomcat-8.0.15/bin/bootstrap.jar:/home/antoine/opt/java/apache-tomcat-8.0.15/bin/tomcat-juli.jar:/home/antoine/opt/java/jdk1.8.0_25/lib/tools.jar org.apache.catalina.startup.Bootstrap start
Antoine,java classes 需要编译,服务器知道编译的 .class 何时发生变化,因为文件已更改。
对于 js、html 或 css 文件,您可以将其放在项目的资源文件夹中,只需保存并在浏览器中刷新即可查看结果。通常,浏览器会在缓存中保存一些数据,您需要在刷新之前清理缓存并查看结果。
如果清除浏览器缓存不起作用,请尝试在 firefox(例如)中使用 firebug 来调试 js 代码并检查资源文件夹中的文件在哪里。可能您使用的是旧版本或类似的想法。
您可以在 tomcat 服务器(服务器视图)中单击两次打开 Tomcat 概览页面。在选项卡发布中选择资源更改时自动发布选项。
重新加载浏览器缓存 Ctrl+F5
。在 Firefox 中会发生什么,Chrome?
好吧,事实上我的 Tomcat 服务器前面有一个 nginx。我最近出于不同的原因更改了配置文件。但新版本包含一个缓存。因此问题。
在某些时候,我已经证明问题不是来自 Eclipse,也不是来自我们的应用程序,并且我检查了 Tomcat 配置并重新安装了它。一定是nginx。
我发现我的 JS 文件有一个 HTTP 状态 304 未修改。这意味着一些网络服务器决定回答这个问题。如果那不是 Tomcat,那么...
我正在使用 Eclipse 和 Tomcat 在 Web 应用程序上工作。我使用 Eclipse 将我的代码更改自动部署到 Tomcat。它适用于 Java 类:当我对 .java 文件进行更改时,我可以立即看到它反映在 Web 应用程序上,而无需重新启动 Tomcat(因为只要它在调试模式下是 运行。
但是对于 JS 文件,我必须停止 Tomcat,通过 Tomcat 的 "Add and remove" 菜单,删除我的 WAR 文件,单击确定,将它们添加回来然后再次单击确定并重新启动 Tomcat 以查看更改。简单的重启或清理无法解决问题。我真的需要删除项目并重新添加它们。
更糟糕的是它曾经有效。您知道是什么原因造成的吗?
这是我的 Tomcat 配置:
你看有什么不对吗?我可以提供更多信息吗?
=== 编辑 ===
我检查了 Eclipse 为 Tomcat 复制资源的地方,似乎 JS 文件已更新。所以这意味着 Eclipse 正确地完成了将资源复制到目标的工作。 Tomcat 未选取更改。
=== 另一个编辑 ===
我们的应用程序中有一个内部缓存。我停用并清除了它,但它并没有解决问题。它不太可能来自那里。
此外,由于我遇到了这个问题,我已经看到两次 Tomcat 接受我的更改,但只有在我很久以后回到应用程序时才看到...
=== 一些新信息===
看来 Tomcat 终于接受了更改...但仅在 10 分钟后。
=== 这也不是 Eclipse 问题 ===
现在很清楚这不是 Eclipse 问题:我从命令行启动 Tomcat,使用与 Eclipse 相同的参数。
这是我使用的命令行:
/home/antoine/opt/java/jdk1.8.0_25/bin/java -Dcatalina.base=/home/antoine/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 -Dcatalina.home=/home/antoine/opt/java/apache-tomcat-8.0.15 -Dwtp.deploy=/home/antoine/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps -Djava.endorsed.dirs=/home/antoine/opt/java/apache-tomcat-8.0.15/endorsed -Djavax.net.ssl.trustStorePassword=somepassword -Djavax.net.ssl.trustStore=/home/antoine/opt/java/apache-tomcat-8.0.15/my.keystore -Xms512m -Xmx1024m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8 -classpath /home/antoine/opt/java/apache-tomcat-8.0.15/bin/bootstrap.jar:/home/antoine/opt/java/apache-tomcat-8.0.15/bin/tomcat-juli.jar:/home/antoine/opt/java/jdk1.8.0_25/lib/tools.jar org.apache.catalina.startup.Bootstrap start
Antoine,java classes 需要编译,服务器知道编译的 .class 何时发生变化,因为文件已更改。
对于 js、html 或 css 文件,您可以将其放在项目的资源文件夹中,只需保存并在浏览器中刷新即可查看结果。通常,浏览器会在缓存中保存一些数据,您需要在刷新之前清理缓存并查看结果。
如果清除浏览器缓存不起作用,请尝试在 firefox(例如)中使用 firebug 来调试 js 代码并检查资源文件夹中的文件在哪里。可能您使用的是旧版本或类似的想法。
您可以在 tomcat 服务器(服务器视图)中单击两次打开 Tomcat 概览页面。在选项卡发布中选择资源更改时自动发布选项。
重新加载浏览器缓存 Ctrl+F5
。在 Firefox 中会发生什么,Chrome?
好吧,事实上我的 Tomcat 服务器前面有一个 nginx。我最近出于不同的原因更改了配置文件。但新版本包含一个缓存。因此问题。
在某些时候,我已经证明问题不是来自 Eclipse,也不是来自我们的应用程序,并且我检查了 Tomcat 配置并重新安装了它。一定是nginx。
我发现我的 JS 文件有一个 HTTP 状态 304 未修改。这意味着一些网络服务器决定回答这个问题。如果那不是 Tomcat,那么...