Как включить отображение каталогов и обслуживание ресурсов на встроенном сервере 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();

Это встроенный подводный сервер в работающей банке.


person Carlos Laspina    schedule 08.11.2017    source источник


Ответы (1)


При добавлении сервлетов также добавьте сервлет "default" в список сервлетов с

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, упакованную в банку, будет работать точно так же, как и любая обычная папка war/webapp, развернутая на любом сервере приложений.

Вы можете использовать любое имя или папку, webapp был просто примером.

person David Hofmann    schedule 08.11.2017