middle
Какие основные особенности появились в спецификации Servlet 3
Servlet 3.0 (JSR 315, 2009) — значительное обновление спецификации, которое устранило необходимость в web.xml для типовых сценариев и добавило поддержку асинхронной обработки.
Ключевые нововведения
| Особенность | Описание |
|---|---|
| Аннотации | @WebServlet, @WebFilter, @WebListener, @WebInitParam — конфигурация без web.xml |
| Web Fragments | Модульность: каждый JAR может содержать META-INF/web-fragment.xml со своими сервлетами и фильтрами |
| Динамическая регистрация | ServletContext.addServlet(), addFilter(), addListener() — программное добавление компонентов |
| Асинхронная обработка | AsyncContext позволяет передать обработку в другой поток, освободив поток контейнера |
Асинхронная обработка (пример)
Пример
@WebServlet(urlPatterns = "/async", asyncSupported = true)
public class AsyncServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
AsyncContext ctx = req.startAsync();
ctx.start(() -> {
// долгая операция в отдельном потоке
ctx.complete();
});
}
}
Асинхронность критически важна для высоконагруженных приложений: вместо блокировки потока контейнера на время I/O-операции, поток освобождается для обработки других запросов. В Spring MVC аналог — DeferredResult и CompletableFuture.
На собеседовании: важно упомянуть все четыре нововведения. Частая ошибка — назвать только аннотации и забыть про асинхронность, которая является архитектурно значимым изменением.