← Назад к вопросам

Какие знаешь веб-серверы?

1.0 Junior🔥 151 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Веб-серверы для Java приложений

Обзор веб-серверов

Веб-сервер — это программа, которая принимает HTTP запросы от клиентов и возвращает ответы. В Java существует множество популярных серверов для развёртывания приложений.

Apache Tomcat

Tomcat — самый популярный и широко используемый веб-сервер для Java.

// Пример конфигурации в Spring Boot (встроенный Tomcat)
// application.properties
server.port=8080
server.servlet.context-path=/myapp
server.tomcat.max-threads=200

// Использование
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
        // Запускается с встроенным Tomcat
    }
}

Особенности:

  • Легко конфигурируется
  • Поддерживает JSP и Servlets
  • Хорошая документация
  • Поддерживает виртуальные хосты
  • По умолчанию в Spring Boot

Jetty

Jetty — лёгкий и быстрый веб-сервер, особенно хорош для embedded приложений.

// Встроенный Jetty
Server server = new Server(8080);
ServletContextHandler handler = new ServletContextHandler();
handler.setContextPath("/");
handler.addServlet(new ServletHolder(new HelloServlet()), "/hello");
server.setHandler(handler);
server.start();

// Spring Boot с Jetty
// pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

Особенности:

  • Лёгкий и быстрый
  • Идеален для микросервисов
  • Низкое потребление памяти
  • Встраивается в приложение

Undertow

Undertow — высокопроизводительный веб-сервер от Red Hat.

// Spring Boot с Undertow
// pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

// application.properties
server.undertow.threads.io=4
server.undertow.threads.worker=20

Особенности:

  • Высокая производительность
  • Асинхронный NIO
  • Использует меньше потоков
  • Отличная масштабируемость

Netty

Netty — асинхронный сетевой фреймворк, используется для высоконагруженных приложений.

// Пример с Spring WebFlux
// pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

// Spring WebFlux использует Netty под капотом
@RestController
public class ReactiveController {
    @GetMapping("/data")
    public Mono<String> getData() {
        return Mono.just("Hello from Netty!");
    }
}

Особенности:

  • Асинхронный неблокирующий I/O
  • Реактивные приложения
  • Работает с WebSockets
  • Предназначен для реального времени

GraalVM Native Image

Грассверт сервер для компилирования Java в нативный код:

# Компиляция Spring Boot приложения в нативный образ
mvn native:compile

# Очень быстрый старт (< 100ms) и низкое потребление памяти

Сравнительная таблица

СерверПроизводительностьПамятьСлучай использованияОбучаемость
TomcatСредняяСредняяКлассические приложенияВысокая
JettyХорошаяНизкаяМикросервисыСредняя
UndertowОтличнаяНизкаяВысоконагруженныеСредняя
NettyОтличнаяНизкаяРеактивные, WebSocketsНизкая

Выбор сервера

// Для большинства случаев — Tomcat (по умолчанию)
// Spring Boot автоматически встраивает выбранный сервер

// Для микросервисов — Jetty или Undertow
// Для реактивных приложений — Netty
// Для максимальной производительности — Undertow

Конфигурация в Spring Boot

// application.yml
server:
  port: 8080
  servlet:
    context-path: /api
  tomcat:
    threads:
      max: 200
      min-spare: 10
    accept-count: 100
    max-connections: 10000
  compression:
    enabled: true
    min-response-size: 1024

Производительность

Рекомендации:

  • Используй Undertow или Jetty для микросервисов
  • Используй Netty для реактивных приложений
  • Томcat хорош для стандартных Spring Boot приложений
  • Всегда профилируй под твои требования
Какие знаешь веб-серверы? | PrepBro