отследить несколько URL-адресов веб-сервисов

Я хочу что-то подобное на свой адрес. Как я могу связать servlet1, servlet2, servlet3 с локальным хостом: 8080, чтобы у меня был другой URL-адрес для вызова, например

локальный: 8080/сервлет

локальный: 8080/servlet1

локальный: 8080/сервлет2

локальный: 8080/сервлет3

У меня есть этот код, который работает только для последнего добавленного URL-адреса (сервлета)

DeploymentInfo servletBuilder = deployment()
                .setClassLoader(ServletServer.class.getClassLoader())
                .setContextPath(MYAPP)
                .setDeploymentName("test.war")
                .addServlets(
                        servlet(servletName,  x)
                        .addInitParam("message", output)
                        .addMapping("/"+servletName.toLowerCase()));

        DeploymentManager manager = defaultContainer().addDeployment(servletBuilder);
        manager.deploy();

        HttpHandler servletHandler = manager.start();
        path = Handlers.path(Handlers.redirect(MYAPP))
                .addPrefixPath(MYAPP, servletHandler);

person olyjosh    schedule 21.01.2015    source источник


Ответы (2)


DeploymentInfo servletBuilder = deployment()
.addServlets(
 servlet("servlet1", YourServlet1.class).addInitParam("param1", "Value A")
.addMapping("/servlet1/*"),
 servlet("servlet2", YourServlet2.class).addInitParam("param2", "Value B")
.addMapping("/servlet2/*"),
 servlet("servlet3", YourServlet3.class).addInitParam("param2", "Value C")
.addMapping("/servlet3/*")  // as many as you like.
);

Взято с использованием информации отсюда: https://github.com/undertow-io/undertow/tree/master/examples/src/main/java/io/undertow/examples/servlet

person Matthew Ong    schedule 19.05.2015
comment
Пытался запустить эти классы по ссылке, которую вы разместили, но я получаю эту ошибку. util.ServiceLoader.fail(ServiceLoader.java:232) в java.util.ServiceLoader.access$100(ServiceLoader.java:185) в java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384) - person olyjosh; 04.06.2015
comment
Попробуйте использовать hightail.com/send, чтобы поделиться своим полным проектом SAMPLE. Это может помочь в устранении неполадок. - person Matthew Ong; 04.06.2015
comment
Привет! Этот пример кода работает: hightail.com/download/bXBaTXRRaFJQb0xIRHRVag - person Matthew Ong; 04.06.2015

Модифицировано из примера кода Undertow 1.2.5:

Срок действия запускаемого проекта по этому URL-адресу истекает 10 июня 2015 г.: https://www.hightail.com/download/bXBaTXRRaFJQb0xIRHRVag


package servlet;

import javax.servlet.ServletException;

import io.undertow.Handlers;
import io.undertow.Undertow;

import io.undertow.server.HttpHandler;
import io.undertow.server.handlers.PathHandler;
import io.undertow.servlet.api.DeploymentInfo;
import io.undertow.servlet.api.DeploymentManager;

import static io.undertow.servlet.Servlets.defaultContainer;
import static io.undertow.servlet.Servlets.deployment;
import static io.undertow.servlet.Servlets.servlet;

/**
 * @author Stuart Douglas
 */
public class ServletServer {

    public static final String MYAPP = "/myapp";

    public static void main(final String[] args) {
        try {

            DeploymentInfo servletBuilder = deployment()
                    .setClassLoader(ServletServer.class.getClassLoader())
                    .setContextPath(MYAPP)
                    .setDeploymentName("doesnotmatter.war")
                    .addServlets(
                            servlet("MessageServletA", MessageServletA.class)
                            .addInitParam("message", "Hello AAA\n")
                            .addMapping("/msgA/*"),
                            servlet("MessageServletB", MessageServletB.class)
                            .addInitParam("message", "Hello BBB\n")
                            .addMapping("/msgB/*"),
                            servlet("MessageServletC", MessageServletC.class)
                            .addInitParam("message", "Hello CCC\n")
                            .addMapping("/msgC/*")               
                    );

            DeploymentManager manager = defaultContainer().addDeployment(servletBuilder);
            manager.deploy();

            HttpHandler servletHandler = manager.start();
            PathHandler path = Handlers.path(Handlers.redirect(MYAPP))
                    .addPrefixPath(MYAPP, servletHandler);
            Undertow server = Undertow.builder()
                    .addHttpListener(8080, "localhost")
                    .setHandler(path)
                    .build();
            server.start();
        } catch (ServletException e) {
            throw new RuntimeException(e);
        }
    }
}

Пожалуйста, протестируйте эту команду из оболочки:


# Runs in background
java -cp target/undertowservlet-jar-with-dependencies.jar servlet.Servletrver &

curl http://localhost:8080/myapp/msgA/
curl http://localhost:8080/myapp/msgB/
curl http://localhost:8080/myapp/msgC/

person Matthew Ong    schedule 04.06.2015