gpt4 book ai didi

java - 有没有办法将 Servlet API 与 Undertow 一起使用?

转载 作者:搜寻专家 更新时间:2023-11-01 01:50:30 24 4
gpt4 key购买 nike

我刚刚发现 Undertow 是如何工作的,我对它的 api 感到惊讶:

Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();

有没有办法像这样使用更方便的servlet api

Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
// ...
}
}).build();
server.start();

我想要实现的是用 Undertow 替换当前使用 servlet api 的 Jetty 容器,但是在阅读了文档和源代码之后,我似乎无法找到一种方法来这样做。我没有使用 .war 文件只是一个嵌入式 Jetty。有人有任何指示吗?

最佳答案

它记录在 Creating a Servlet Deployment 部分。这是一个基于文档的 MCVE,前提是您有 dependencies对,还有 Servlet API。

package com.stackoverflow.q35269763;

import io.undertow.Handlers;
import io.undertow.Undertow;
import io.undertow.server.handlers.PathHandler;
import io.undertow.servlet.Servlets;
import io.undertow.servlet.api.DeploymentInfo;
import io.undertow.servlet.api.DeploymentManager;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Test {

public static void main(String... args) throws Exception {
DeploymentInfo servletBuilder = Servlets.deployment().setClassLoader(Test.class.getClassLoader())
.setDeploymentName("myapp").setContextPath("/myapp")
.addServlets(Servlets.servlet("myservlet",
new HttpServlet() {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("Hello World!");
}
}.getClass()).addMapping("/myservlet"));
DeploymentManager manager = Servlets.defaultContainer().addDeployment(servletBuilder);
manager.deploy();
PathHandler path = Handlers.path(Handlers.redirect("/myapp")).addPrefixPath("/myapp", manager.start());
Undertow server = Undertow.builder().addHttpListener(8888, "localhost").setHandler(path).build();
server.start();
}

}

当你打开http://localhost:8888/myapp/myservlet在复制'n'粘贴'n'运行上面的代码后,在您最喜欢的网络浏览器中,您会看到

Hello World!

关于java - 有没有办法将 Servlet API 与 Undertow 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35269763/

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