一尘不染

如何使Jetty动态加载“静态”页面

spring

我正在构建Java Web应用程序,并且我讨厌传统的“代码-编译-部署-测试”周期。我想输入一个微小的更改,然后立即查看结果,而无需编译和部署。

幸运的是,Jetty很适合这样做。这是一个纯Java Web服务器。它带有一个非常不错的maven插件,可让你直接从构建树中启动Jetty阅读-无需打包war文件或部署。它甚至具有scanInterval设置:将其设置为非零值,它将监视你的Java文件和各种配置文件中的更改,并在更改后几秒钟自动重新部署。

只有一件事让我摆脱了必杀技。我的src / main / webapp目录中有javascript和css文件,这些文件刚刚由Jetty提供。我想能够编辑这些并有变化显示出来,当我刷新页面在浏览器中。不幸的是,Jetty使这些文件保持打开状态,因此在运行时(在Windows上)我无法对其进行修改。

有谁知道如何让Jetty放开这些文件,以便我可以编辑它们,然后将编辑后的文件提供给以后的请求?


阅读 582

收藏
2020-04-18

共1个答案

一尘不染

你会在网上找到许多建议,包括

context.getInitParams()。put(“ useFileMappedBuffer”,“ false”);

或覆盖WebAppContext,或为init参数使用完全限定的名称。这些建议对我都不起作用(使用Jetty 7.2.2)。问题的一部分在于,useFileMappedBuffer选项需要在WebAppContext用于提供静态文件的servlet上设置,而不是在上下文上设置。

最后,我在一个简单的ServletContextHandler上做了类似的事情

// Startup stuff
final Server server = new Server(port);
ServletContextHandler handler = new ServletContextHandler();
handler.setResourceBase(path);

SessionManager sm = new HashSessionManager();
SessionHandler sh = new SessionHandler(sm);
handler.setSessionHandler(sh);

DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holder = new ServletHolder(defaultServlet);
holder.setInitParameter("useFileMappedBuffer", "false");
handler.addServlet(holder, "/");

server.setHandler(handler);
server.start();
server.join();
2020-04-18