gpt4 book ai didi

java - 在java代码中启动嵌入式jetty,如何让它自动重新加载*.jsp/*.css/*.js?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:18 24 4
gpt4 key购买 nike

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

最佳答案

您对 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 .

关于java - 在java代码中启动嵌入式jetty,如何让它自动重新加载*.jsp/*.css/*.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20964126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com