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

时间:2014-01-07 04:49:29

标签: java jetty reload

在我的项目中,我们在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插件)

1 个答案:

答案 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