The original reason for init() was that ancient versions of Java couldn't dynamically invoke constructors with arguments, so there was no way to give the constructur a ServletConfig.
I think a more likely explanation is that servlets are constructed from the class name given in web.xml, where no provisions for constructor parameters can be defined. Java 1.1 -which introduced reflection- predates the Servlet specification.
In addition, having an init method makes it possible to include it in the Servlet interface, thus forcing the developer to implement it. This is similar to
applets, where the constructor plays no particular role, but the lifecycle methods of interface Applet do.