如果带有 StaticHttpHandler 的 Grizzly 正在运行,并且对静态文件(例如 index.html)发出请求,则该文件将被锁定。也就是说,在 Grizzly 运行时无法编辑和保存 index.html。
有任何解决方案或解决方法可以保存当前提供的静态资源吗?
如果带有 StaticHttpHandler 的 Grizzly 正在运行,并且对静态文件(例如 index.html)发出请求,则该文件将被锁定。也就是说,在 Grizzly 运行时无法编辑和保存 index.html。
有任何解决方案或解决方法可以保存当前提供的静态资源吗?
一种可能的解决方法是禁用 FileCache。
HttpServer server = HttpServer.createSimpleServer();
server.getNetworkListener("grizzly").getFileCache().setEnabled(false);
如果这没有帮助,我建议您记录一个问题,以便我们尝试解决它。
我在 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);
我为此挣扎了一段时间。上面的帖子有效,但前提是在服务器启动后完成。
如果您在运行之前将其设置为 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); }