【问题标题】:How to let jetty block the request when reloading modified classes?重新加载修改的类时如何让码头阻止请求?
【发布时间】:2012-04-24 05:19:35
【问题描述】:

我正在使用dcevm + run-jetty-run + livereload ,尝试在修改java源时不重启jetty开发web应用。

一切正常。当我修改一个java类时,livereload监听到了变化,并触发了浏览器刷新打开的页面来查看修改结果。

但我发现它仍然不太方便:当浏览器重新加载时,dcevm 和 jetty 可能还没有重新加载修改后的类。不得不再次手动刷新页面,但不确定这次是否显示修改后的结果,没有仔细检查内容。

所以我想知道当我修改一些类并且 dcevm 正在重新加载时,有什么方法可以让码头阻止请求。它将确保显示的页面总是被修改。

【问题讨论】:

    标签: java web jetty hotswap dcevm


    【解决方案1】:

    这对您的口味来说可能太老套了,但是您可以在您的 Java 源代码中插入一个静态初始化 sn-p 以在重新加载后更新一个已知的单独文件。比 livereload 可以观看那个单独的文件,而不是让它直接在 .java 源上工作。

    类似的东西:

    public class ReloadUtils {
      public static void notifyUpdate(String className) {
        String baseDir = System.getProperty("DEV_MODE_BASEDIR") + "/";
        File file = new File(baseDir + className + ".updated");
        FileWriter fw = new FileWriter(file.getAbsoluteFile(), false); // overwrite instead of append
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(Long.toString(System.currentTimeMillis()));
        bw.close();
      }
    }
    
    public class Reloadable {
    
      private final static boolean DEV_MODE = System.getProperty("DEV_MODE").equals("true");
    
      static {
        // static finals trigger most compilers to remove the statements in this case
        if (DEV_MODE) { 
          ReloadUtils.notifyUpdate(Reloadable.class.getName());
        }
      }
    
      /* lots of useful stuff */
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多