【问题标题】:No need to restart the server after making changes in html or javascript. Why?更改 html 或 javascript 后无需重新启动服务器。为什么?
【发布时间】:2017-07-11 10:20:21
【问题描述】:

在 HTML 或 JAVASCRIPT 中进行更改后,我们不需要重新启动服务器。但是我们需要在对 Servlet 或任何服务器端代码进行更改后重新启动它。为什么?

【问题讨论】:

  • 因为HTML和JS不在服务器上运行?
  • HTML、CSS 和 JS 作为对请求的响应发送到客户端。当文件更改时,将发送更新的文件。尽管浏览器也可能在缓存响应后忽略服务器请求,并且浏览器可能正在使用它缓存的旧版本。

标签: javascript html tomcat servlets


【解决方案1】:

HTML 和 JS 由您的浏览器运行时解释,因此更改会立即反映在浏览器刷新时。 Servlet 和服务器端代码通常需要编译,因此需要重新启动服务器。服务器重新启动会强制重新加载更改的类。这就是 JRebel 有趣的原因(它可以在不重新启动服务器的情况下重新加载服务器端类)。希望这会有所帮助!

【讨论】:

  • 可能值得一提的是,更改是否立即反映还取决于服务器的缓存配置。虽然动态 HTML 可能被设置为更频繁地获取,但 JS 和静态 HTML 内容可能不会再次提供,直到缓存过期或被清除。
【解决方案2】:

服务器代码只是一个程序。当你运行一个程序时,它的内容被加载到 RAM 中并运行。如果更新程序,磁盘上的版本会更新,但旧版本仍保留在 RAM 中。您必须关闭旧版本的服务器程序并运行新的。

HTML 和 Javascript 在客户端上呈现。这些通常不会加载到服务器的 RAM 中(缓存目的除外)。 HTML/JS 甚至不是服务器代码的一部分(虽然 JS 可以与服务器交互,但 AJAX 是一个突出的例子)

【讨论】:

    【解决方案3】:

    因为 HTML 和 JS 在客户端执行 - 在用户浏览器中。而不是服务器端代码。但是在代码更改时重新启动服务器并不是正确的建议,因为服务器端代码会在服务器的每个用户外部请求上执行。

    您的代码可以进行某种缓存以在某些特殊的服务器端事件发生之前不执行代码。

    【讨论】:

      【解决方案4】:

      这与服务器端或客户端无关,而与服务器为应用程序提供服务的方式有关。您使用了“Servlets”这个词,所以我假设您正在使用 JavaEE 编写代码。

      当您的 Catalina 服务器启动应用程序时,它会将整个应用程序加载到执行整个服务器的 JVM 中。它不跟踪磁盘上的文件修改。如果你想让 Catalina 这样做,你可以查看这个。 Why are my JSP changes are not reflected without restarting Tomcat?

      我不同意其他人的回答是关于简化:

      这不是因为您必须重新加载服务器的服务器端代码。您可以找到各种跟踪文件修改的语言,例如 PHP,甚至您亲爱的 JavaEE,您可以在上面的链接中阅读它。

      您还可以注意到,并不是因为 HTML、CSS 和 JS 是在客户端执行的,所以您不需要重新加载服务器。这是因为您的服务器配置每次客户端请求时都会读取磁盘上的文件。如果您有任何缓存系统,您需要先刷新它才能看到您修改后的文件下载到客户端。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        相关资源
        最近更新 更多