Классы реализации сервлета могут иметь конструктор, но они должны использовать метод init () для инициализации сервлета по двум причинам: во-первых, вы не можете объявлять конструкторы в интерфейсе в Java, что означает, что вы не можете применить это требование к любому классу, который реализует интерфейс сервлета и во-вторых, сервлету требуется объект ServletConfig для инициализации, который создается контейнером, поскольку он также имеет ссылку на объект ServletContext, который также создается контейнером.
Сервлет - это интерфейс, определенный в пакете javax.servlet, а HttpServlet - это класс, и, как и любой другой класс в Java, он может иметь конструктор, но вы не можете объявить конструктор внутри интерфейса в Java. Если вы не предоставите явный конструктор, то компилятор добавит конструктор по умолчанию без аргументов в любой класс реализации сервлета. Еще одна причина, по которой вам не следует инициализировать сервлет с использованием конструктора, поскольку сервлеты не создаются напрямую Java-кодом, а контейнеры создают там экземпляры и хранят их в пуле. Поскольку контейнеры с веб-серверов, таких как Tomcat и Jetty, используют Java Reflection для создания экземпляра сервлета, присутствие конструктора аргументов не обязательно. Поэтому, если вы случайно предоставите параметрический конструктор и забудете написать конструктор без аргументов, веб-контейнер не сможет создать экземпляр вашего сервлета, поскольку конструктор по умолчанию отсутствует. Помните, компилятор Java не добавляет конструктор по умолчанию без аргументов, если в классе присутствует параметрический конструктор. Вот почему не рекомендуется указывать конструктор в классе сервлетов.