Комментарии (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 приложений
- Всегда профилируй под твои требования