在我的项目中,我们在java代码中启动jetty服务器,如:
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,所以这里不能使用3rd-putty插件)
答案 0 :(得分:2)
简单使用WebAppContext意味着您的webapp内容正在各种servlet临时目录中展开/复制/移动/管理。您的项目*.jsp
以及*.js
和*.css
不在线。
其他工具(如jetty-maven-plugin
)实现此目的的方法是在检测到文件更改时重新启动webapp。
示例(伪代码):
String webroot = getWarRootPath();
WebAppContext webapp = new WebAppContext(webroot, "/");
server.setHandler(webapp);
scanner.setMonitorDirectory(webroot);
scanner.addListener(this);
...
public void onScannerEvent(ScannerEvent evt) {
if(!evt.path.isFile()) {
return; // no point restarting on directory only event
}
webapp.stop();
if(evt.isNew() || evt.wasDeleted()) {
reconfigureScanner();
}
webapp.start();
}
如果您正在使用Java 7,则可以查看其java.nio.file.Watch*
设施,或者您可以使用org.eclipse.jetty.util.Scanner
(遗留代码)来完成same end goal。