gpt4 book ai didi

java - 从类路径加载的 servlet 上下文的热部署?

转载 作者:行者123 更新时间:2023-12-02 02:17:37 25 4
gpt4 key购买 nike

我有以下嵌入式 Jetty 设置:

    ServletContextHandler topHandler = new ServletContextHandler(server, contextPath);

// Set path of static resources
topHandler.setBaseResource(...);

// Bind dynamic content to /api
RootResource rootResource = new RootResource();
FilterHolder restApiHandler = new FilterHolder(rootResource);
for (Entry<String, String> parameter : initParams.entrySet())
restApiHandler.setInitParameter(parameter.getKey(), parameter.getValue());
topHandler.addFilter(restApiHandler, "/api/*", EnumSet.allOf(DispatcherType.class));

// Bind static content to /
ServletHolder staticResourceHandler = topHandler.addServlet(DefaultServlet.class, "/");

server.start();

我在 https://www.eclipse.org/jetty/documentation/9.4.19.v20190610/hot-deployment.html 找到了有关热部署的文档但我不明白如何将它们放在一起。

如何让 Jetty 在重新加载 servlet 的类文件后重新加载 servlet,这样我就不必在开发过程中每次修改 Java 文件时都重新启动服务器?

最佳答案

热部署通常是 WebAppContext 的一项功能。以及提供隔离类加载器的 WAR 概念。

ServletContextHandler需要一个自定义类加载器来模仿 WebAppContext 的隔离类加载器行为提供。

热部署是 DeploymentManager 的一项功能以及相关的AppProvider它进行扫描以检测更改(例如在文件系统上)。

您需要一个DeploymentManager作为你的Server上的一颗 bean .

您需要选择 AppProvider (例如 WebAppProvider )监视目录的更改并触发新的应用程序更新回 DeploymentManager .

接下来,您需要 ServletContextHandler在该受监控目录中完全以 XML 可部署格式声明。

您正在修改的类需要来自不属于服务器类加载器的某个位置。

您正在使用的 XML 部署需要创建这个独立的自定义类加载器并从这个新的(非服务器)位置加载类。

这些组合起来就是您正在寻找的热部署。

关于java - 从类路径加载的 servlet 上下文的热部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57294096/

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