Поскольку Servlet - это интерфейс, а не абстрактный класс. Аргументы конструктора не могут быть указаны в интерфейсе, поэтому ServletContext должен быть указан в обычной сигнатуре метода.
Это позволяет серверу приложений знать, как правильно инициализировать любую реализацию сервлета.
Другим решением было бы требовать, но не применять принудительно, конструктор, принимающий ServletContext. Сервер приложений затем вызывает конструктор через отражение. Однако разработчики спецификации сервлета не выбрали этот путь.