Ada*_*old 4 java servlets undertow
我刚刚发现了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();
Run Code Online (Sandbox Code Playgroud)
有没有办法以某种方式使用更方便的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();
Run Code Online (Sandbox Code Playgroud)
我想要实现的是替换当前使用的Undertow使用servlet api的Jetty容器,但是在阅读了文档和源代码后,我似乎找不到这样做的方法.我没有使用.war文件只是一个嵌入式Jetty.有人有指针吗?
它在创建Servlet部署一节中有介绍.这是一个基于提供的文档的MCVE,你有正确的依赖关系,以及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();
}
}
Run Code Online (Sandbox Code Playgroud)
在copy'n'paste'n'running上面的代码之后,当你在你最喜欢的webbrowser中打开http:// localhost:8888/myapp/myservlet时,你会看到
你好,世界!
| 归档时间: |
|
| 查看次数: |
1891 次 |
| 最近记录: |