JBoss AS 7: сопоставление сервлета с корневым контекстом («/») с помощью конфигурации кода

Используя JBoss AS 7, я пытаюсь настроить свой контейнер Servlet 3.0, используя код Java вместо веб-сайта. .xml. Моя проблема в том, что когда я регистрирую сервлет, сопоставленный с корнем контекста ("/"), сервлет по умолчанию имеет приоритет и вместо этого обрабатывает запросы. Я безуспешно пробовал и ServletContextListener, и ServletContainerInitializer.

Попытка 1: ServletContextListener

@WebListener
public class AppInitializer implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        ServletContext context = event.getServletContext();

        ServletRegistration.Dynamic homeServlet = context.addServlet("homeServlet", new HomeServlet());
        homeServlet.addMapping("/");
        homeServlet.setLoadOnStartup(1);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // Do nothing.
    }
}

Попытка 2: ServletContainerInitializer

public class AppInitializer2 implements ServletContainerInitializer {

    @Override
    public void onStartup(Set<Class<?>> classes, ServletContext context) throws ServletException {
        ServletRegistration.Dynamic homeServlet = context.addServlet("homeServlet", new HomeServlet());
        homeServlet.addMapping("/");
        homeServlet.setLoadOnStartup(1);
    }
}

Дополнительная информация

  • Если я изменю отображение с /на /example, мой сервлет будет обрабатывать запросы к новый путь правильно.
  • Если я зарегистрирую свой сервлет в /через web.xml вместо кода Java, мой сервлет будет правильно обрабатывать запросы к корневому контексту.

Итак… что я могу сделать, чтобы зарегистрировать сервлет в корне контекста через Java-код без переопределения сервлетом по умолчанию?

Спасибо!

5
задан Brendan 1 June 2012 в 15:17
поделиться