我正在构建Java Web应用程序,并且我讨厌传统的“代码-编译-部署-测试”周期。我想输入一个微小的更改,然后立即查看结果,而无需编译和部署。
幸运的是,Jetty很适合这样做。这是一个纯Java Web服务器。它带有一个非常不错的maven插件,可让你直接从构建树中启动Jetty阅读-无需打包war文件或部署。它甚至具有scanInterval设置:将其设置为非零值,它将监视你的Java文件和各种配置文件中的更改,并在更改后几秒钟自动重新部署。
只有一件事让我摆脱了必杀技。我的src / main / webapp目录中有javascript和css文件,这些文件刚刚由Jetty提供。我想能够编辑这些并有变化显示出来,当我刷新页面在浏览器中。不幸的是,Jetty使这些文件保持打开状态,因此在运行时(在Windows上)我无法对其进行修改。
有谁知道如何让Jetty放开这些文件,以便我可以编辑它们,然后将编辑后的文件提供给以后的请求?
你会在网上找到许多建议,包括
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();