为什么我们使用init()而不是Constructor

为什么我们需要init()而不是constructor

请参考ServletApplet参考。
Appletinit()Servlet有何不同?

init()方法创建并加载servlet。 但是servlet实例首先是通过构造函数创建的(由Servlet容器完成)。 我们不能在servlet中用参数编写servlet类的构造函数(它会抛出exception)。 因此,他们提供了一个init()方法,该方法接受ServletConfig对象作为参数。 ServletConfig对象为servlet提供有关其初始化(init)参数的信息。 Servlet类不能用ServletConfig对象声明构造函数作为参数,也不能访问ServletConfig对象。

更多信息请访问: http : //java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets6.html

你需要两者,但它们执行不同的活动,你的构造函数在通过调用new创建对象时执行,但对于某些类型的对象,你不能控制它们的创建,或者你宁愿执行一些代码而不仅仅是在创建对象但完全初始化之后,您需要一个特殊的方法,有人打算调用该方法表示对象已准备好。

特别是对于不是由您管理的对象,而是服务器,框架或管理这些对象的对象。

您应该将此方法看作是在此对象将在构造函数上执行的代码顶部为您提供的商品

这是一个设计选择。 servlet规范说你必须提供一个no-arg构造函数,你可以覆盖init()方法来执行初始化任务。 他们本可以选择这样做,并要求servlet有一个参数构造函数( ServletConfig ),可以选择抛出ServletException 。 从技术上讲,没有问题,因为reflectionAPI允许您调用类中声明的任何构造函数。

但是,使用init()方法允许servlet容器预先实例化对象并延迟其初始化。 它有助于分离生命周期的不同阶段。

就个人而言,我认为这不是一个强有力的设计选择。 让Web应用程序为servlet容器提供预先实例化的servlet,而不是让容器调用各种servlet的构造函数会更方便。