public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
public void init() throws ServletException {
}
GenericServlet抽象类中,存在两个init()方法。设计者的初衷到底是什么呢?先说结论,只重写init(方法,可以保存GenericServlet对象中的servletConfig。
我们知道,抽象类是无法直接产生实例的,需要另一个类去继承这个抽象类,那么就会发生方法覆盖的问题,如果在类中覆盖了GenericServlet抽象类的init()方法,那么程序员就必须手动的去维护ServletConfig对象了,还得调用super.init(servletConfig)方法去调用父类GenericServlet的初始化方法来保存ServletConfig对象,这样会给程序员带来很大的麻烦。GenericServlet提供的第二个不带参数的init( )方法,就是为了解决上述问题的。
这个不带参数的init()方法,是在ServletConfig对象被赋给ServletConfig引用后,由第一个带参数的init(ServletConfig servletconfig)方法调用的,那么这意味着,当程序员如果需要覆盖这个GenericServlet的初始化方法,则只需要覆盖那个不带参数的init( )方法就好了,此时,GenericServlet对象仍然有servletConfig保存着。
4、更强大的HttpServlet
继承了GenericServlet抽象类的HttpServlet,为什么说HttpServlet更加强大?有两个主要原因:
-
HttpServlet是由GenericServlet抽象类扩展而来的
public abstract class HttpServlet extends GenericServlet implements Serializable
- 1
-
现在大部分的应用程序都要与HTTP结合起来使用,这意味着我们可以利用HTTP的特性完成更多更强大的任务。