A servlet may have a constructor, but only one which takes no parameters. This is because servlets are dynamically loaded by the servlet container as needed, and the classloader can't know what other parameters you might want to pass to the constructor, or where to get them from.
This is the same with all dynamically loaded classes, which is why the idiom of a user-supplied "init" function is so common in
Java APIs.