开始在java代码中嵌入jetty,如何使其自动重新加载*.jsp/*.css/*.js?

开始在java代码中嵌入jetty,如何使其自动重新加载*.jsp/*.css/*.js?,java,jetty,reload,Java,Jetty,Reload,在我的项目中,我们用java代码启动jetty server,如: import org.eclipse.jetty.server.Server; public static void main(String[] args) { Server server= new Server(); server.setThreadPool(createThreadPool()); server.addConnector(createConnector()); server.

在我的项目中,我们用java代码启动jetty server,如:

import org.eclipse.jetty.server.Server;

public static void main(String[] args) {
    Server server= new Server();
    server.setThreadPool(createThreadPool());
    server.addConnector(createConnector());
    server.setHandler(new WebAppContext(getWarRootPath(), "/"));
    server.setStopAtShutdown(true);
    server.start();
}
它工作得很好,但唯一的问题是,如果在jetty运行时修改*.jsp或*.js或*.css,我们无法通过刷新浏览器看到更改。我必须重新启动程序


有没有办法让它自动重新加载?(我必须用java代码启动jetty,所以这里不能使用第三个putty插件)

您对WebAppContext的简单使用意味着您的webapp内容正在各种servlet临时目录中扩展/复制/移动/管理。您的项目的
*.jsp
*.js
*.css
不是活动的

其他工具(如
jetty maven plugin
)实现这一点的方法是在检测到文件更改时重新启动webapp

示例(伪代码):

String webroot=getWarRootPath();
WebAppContext webapp=新的WebAppContext(webroot,“/”);
setHandler(webapp);
scanner.setMonitorDirectory(webroot);
scanner.addListener(this);
...
CanneEvent上的公共无效(ScannerEvent evt){
如果(!evt.path.isFile()){
return;//仅在目录事件上重新启动没有意义
}
webapp.stop();
if(evt.isNew()| | evt.wasdelected()){
重新配置扫描();
}
webapp.start();
}

如果您使用的是Java 7,您可以查看它的
Java.nio.file.Watch*
功能,或者您可以使用
org.eclipse.jetty.util.Scanner
(遗留代码)来完成这个任务。

出于兴趣,Joakim,是否可以使用与您的答案类似的WebAppProvider和DeploymentManager的组合。设置setMonitorAdderName和setCanInterval。@Andrew当然可以,Jetty发行版本身就是这样运行的。