Gymterview
junior

Почему HttpServlet класс объявлен как абстрактный

HttpServlet объявлен абстрактным, потому что его методы doGet(), doPost() и другие по умолчанию возвращают HTTP 405 (Method Not Allowed). Класс предоставляет только каркас обработки HTTP-запросов, а конкретная бизнес-логика должна быть реализована в подклассе.

Это применение паттерна Template Method: service() определяет алгоритм обработки (определить тип запроса, вызвать нужный метод), а doGet()/doPost() — точки расширения. Если бы HttpServlet не был абстрактным, разработчик мог бы случайно создать его экземпляр и получить сервлет, отвечающий 405 на все запросы.

Технически в HttpServlet нет абстрактных методов — ключевое слово abstract в объявлении класса используется как защитный механизм, принуждающий разработчика создать подкласс и переопределить нужные методы.

На собеседовании: ключевое слово — Template Method pattern. HttpServlet не содержит абстрактных методов, но объявлен abstract намеренно, чтобы предотвратить создание «пустого» сервлета.