Как включить список каталогов и обслуживание ресурсов на встроенном сервере Undertow?
В примере, приведенном на сайте документации undertow, показано, как настроить 2 сервлета и их сопоставления. Но я не могу найти, как настроить сервлет по умолчанию, чтобы разрешить листинг каталога и обслуживание ресурсов.
DeploymentInfo servletBuilder = Servlets.deployment()
.setClassLoader(ServletServer.class.getClassLoader())
.setContextPath("/myapp")
.setDeploymentName("test.war")
.addServlets(
Servlets.servlet("MessageServlet", MessageServlet.class)
.addInitParam("message", "Hello World")
.addMapping("/*"),
Servlets.servlet("MyServlet", MessageServlet.class)
.addInitParam("message", "MyServlet")
.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(8080, "localhost")
.setHandler(path)
.build();
server.start();
Это встроенный сервер undertow в работающей банке.
1 ответ
Решение
При добавлении сервлетов также добавьте сервлет "по умолчанию" в список сервлетов с
Servlets.servlet("default", DefaultServlet.class)
.addInitParam(DefaultServlet.DIRECTORY_LISTING, "true")
.addInitParam(DefaultServlet.DEFAULT_ALLOWED, "true")
.addInitParam(DefaultServlet.ALLOW_POST, "false")
.addInitParam(DefaultServlet.RESOLVE_AGAINST_CONTEXT_ROOT, "true")
Затем перед развертыванием контейнера добавьте это в DeploymentInfo
servletBuilder.setResourceManager(new ClassPathResourceManager(App.class.getClassLoader(), "webapp"));
Тогда все, что вы поместите в папку webapp, которая упакована в jar, будет работать точно так же, как любая обычная папка war / webapp, развернутая на любом сервере приложений.
Вы можете использовать любое имя или папку, webapp
был просто примером.