Как сервер приложений JBoss/WildFly определяет точку входа в веб-приложение?

«Как сервер приложений JBoss/WildFly определяет точку входа в веб-приложение?» — вопрос из категории Other, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JBoss/WildFly определяет точку входа (стартовый компонент) через дескрипторы развёртывания и аннотации.

Основные механизмы:

  1. Деплоймент-дескриптор web.xml (Servlet): Указывает сервлет и его URL-шаблон, который будет обрабатывать начальные запросы.

    <web-app>
        <servlet>
            <servlet-name>MainServlet</servlet-name>
            <servlet-class>com.example.MainServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>MainServlet</servlet-name>
            <url-pattern>/start</url-pattern> <!-- Точка входа по /start -->
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file> <!-- Стартовая страница -->
        </welcome-file-list>
    </web-app>
  2. Аннотации (Servlet 3.0+): Класс, помеченный @WebServlet, автоматически регистрируется сервером.

    @WebServlet("/app/*") // Обрабатывает все запросы, начинающиеся с /app/
    public class ApplicationServlet extends HttpServlet { ... }
  3. Стартовые EJB-компоненты: Singleton-бин с аннотацией @Startup выполнится при запуске приложения.

    @Singleton
    @Startup
    public class InitializationBean {
        @PostConstruct
        public void init() {
            // Код инициализации при старте сервера
        }
    }
  4. Фреймворки: При использовании JSF, Spring Boot или других фреймворков точка входа определяется их конфигурацией (например, контроллер с @Controller в Spring, index.xhtml в JSF).

Сервер сканирует развёрнутый артефакт (WAR/EAR) и активирует компоненты согласно этим правилам.