【问题标题】:Grizzly locks static served resourcesGrizzly 锁定静态服务资源
【发布时间】:2012-11-09 11:44:20
【问题描述】:

如果带有 StaticHttpHandler 的 Grizzly 正在运行,并且对静态文件(例如 index.html)发出请求,则该文件将被锁定。也就是说,在 Grizzly 运行时无法编辑和保存 index.html。

有任何解决方案或变通方法可以保存当前提供的静态资源吗?

【问题讨论】:

    标签: grizzly


    【解决方案1】:

    一种可能的解决方法是禁用 FileCache。

    HttpServer server = HttpServer.createSimpleServer();
    server.getNetworkListener("grizzly").getFileCache().setEnabled(false);
    

    如果这没有帮助,我建议您登录issue,以便我们尝试解决它。​​

    【讨论】:

    • 嗯.. 不,它并没有真正的帮助。
    • @bebo 尝试像这样迭代现有的网络侦听器:for (NetworkListener l : server.getNetworkListeners()) { l.getFileCache().setEnabled(false); } 这个解决方案对我有用。
    • 在 grizzly 2.3.3 中工作:
    【解决方案2】:

    我在 Grizzly 2.3.16 中找不到 server.getNetworkListnener 方法,所以当我这样做时它对我有用:

        HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(baseUri), rc);
        StaticHttpHandler staticHttpHandler = new StaticHttpHandler("docRoot");
        staticHttpHandler.setFileCacheEnabled(false);
        server.getServerConfiguration().addHttpHandler(staticHttpHandler);
    

    【讨论】:

      【解决方案3】:

      我为此苦苦挣扎了一段时间。上面的帖子有效,但前提是在服务器启动后完成。

      如果您在运行之前将其设置为 false,则服务器会在您启动它时重新打开文件缓存。确保在调用 server.start() 后将其关闭,如此处所示。

      看起来 Jersey 2.3.17 / Grizzly HttpServer 在您调用时打开了缓存

      server.start();
      

      尽管在启动之前将其设置为 false。

      server.start(); // turns file cache back on
      handler.setFileCacheEnabled(false); // turn it off again
      // get every NetworkListener and set it to false (as these will also lock files)
      for (NetworkListener l : server.getListeners()) {l.getFileCache().setEnabled(false);  }        
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-22
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        • 2014-05-29
        • 2019-09-09
        • 2011-03-29
        • 1970-01-01
        相关资源
        最近更新 更多