开始在java代码中嵌入jetty,如何使其自动重新加载*.jsp/*.css/*.js?
在我的项目中,我们用java代码启动jetty server,如:开始在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.
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发行版本身就是这样运行的。