Какие веб-серверы известны для запуска Java приложений
Что проверяют
Различаете ли вы контейнер сервлетов, сервер приложений Jakarta EE и встроенный сервер в Spring Boot. Следом обычно спрашивают, что стоит под капотом у вашего текущего проекта и чем Tomcat отличается от WildFly.
Как отвечать
Разложите по категориям:
- контейнеры сервлетов: Apache Tomcat, Eclipse Jetty, Undertow. Реализуют Servlet API, WebSocket, JSP, но не весь Jakarta EE: EJB и менеджера транзакций JTA в них нет;
- серверы приложений Jakarta EE: WildFly и его коммерческая сборка JBoss EAP, Payara, Open Liberty, Eclipse GlassFish, TomEE (Tomcat с добавленными спецификациями), из коммерческих Oracle WebLogic и IBM WebSphere. Дают CDI, JPA, JTA, JMS из коробки;
- серверы без Servlet API: Netty и Reactor Netty (по умолчанию в Spring WebFlux), Vert.x (на нём построен HTTP-слой Quarkus).
Современный стандарт это встроенный сервер: spring-boot-starter-web по умолчанию тянет Tomcat, заменить его на Jetty можно исключением зависимости. Приложение запускается как java -jar, внешний сервер и деплой WAR почти не нужны. Undertow в Spring Boot 4 больше не поддерживается, потому что не реализует Servlet 6.1.
Стоит назвать смену пространства имён: с Jakarta EE 9 пакеты javax.servlet стали jakarta.servlet. Tomcat 10 и новее работает только с jakarta, Spring Boot 3 и 4 тоже.
Перед Java-сервером обычно стоит nginx или балансировщик, но это reverse proxy, а не место, где исполняется Java.
Где спотыкаются
Называют nginx или Apache HTTP Server сервером для Java. Они проксируют запросы, Java-код в них не выполняется.
Ставят знак равенства между Tomcat и сервером приложений. Если проекту нужны EJB или распределённые транзакции, одного Tomcat мало.
Деплоят старый WAR с javax.* на Tomcat 10 и получают ClassNotFoundException. Нужна миграция пакетов на jakarta, например через Apache Tomcat Migration Tool for Jakarta EE. Туда же ошибка из устаревших статей: GlassFish давно развивает Eclipse Foundation, а не Oracle.