gpt4 book ai didi

resteasy - 使用 undertow 和 resteasy 进行 HTTP 处理程序和 Resteasy 部署

转载 作者:行者123 更新时间:2023-12-04 05:32:29 31 4
gpt4 key购买 nike

我正在尝试同时运行 HTTPServer 和 REST 处理程序。一次只能工作一个,不能同时工作。我需要提供 html 页面和 api。

这是我的代码。

    public class HttpServer {

private final UndertowJaxrsServer server = new UndertowJaxrsServer();
private static String rootPath = System.getProperty("user.dir");

private final Undertow.Builder serverBuilder;

public HttpServer(Integer port, String host) {
serverBuilder = Undertow
.builder()
.addHttpListener(port, host)
.setHandler(
Handlers.path().addPrefixPath(
"/",
Handlers.resource(
new FileResourceManager(new File(
rootPath + "/web"), 100))
.addWelcomeFiles(
rootPath + "/web/index.html")));
server.start(serverBuilder);
}

public DeploymentInfo deployApplication(String appPath,
Class<? extends Application> applicationClass) {
ResteasyDeployment deployment = new ResteasyDeployment();
deployment.setApplicationClass(applicationClass.getName());
return server.undertowDeployment(deployment, appPath);
}

public void deploy(DeploymentInfo deploymentInfo) throws ServletException {
server.deploy(deploymentInfo);
}

public static void main(String[] args) throws ServletException {
HttpServer myServer = new HttpServer(8080, "0.0.0.0");

DeploymentInfo di = myServer
.deployApplication("/rest", MyApplication.class)
.setClassLoader(HttpServer.class.getClassLoader())
.setContextPath("/my").setDeploymentName("My Application");
myServer.deploy(di);
}
}

最佳答案

UndertowJaxrsServer正在覆盖您的构建器的文件处理程序:

public UndertowJaxrsServer start(Undertow.Builder builder)
{
server = builder.setHandler(root).build();
server.start();
return this;
}

似乎没有办法将另一个处理程序传递给 UndertowJaxrsServer。可能的解决方法可能是:
  • 使用一个资源类部署另一个应用程序,该资源类仅提供文件服务。
  • 使用空白的 Undertow 并摆脱简单的 JAX-RS 部署带来的舒适感。
  • 关于resteasy - 使用 undertow 和 resteasy 进行 HTTP 处理程序和 Resteasy 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382519/

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