GenericServlet类中,提供了两种重载的init()方法 (Tomcat中的源代码 ):
·public void init(ServletConfig config)throws ServletException{
this.config = config;
this.init();
}
·public void init()throws ServletException{
}
当容器(tomcat)帮忙调用init(ServletConfig config)并且给传过来一个参数config,这个方法把参数对象的引用指向类的成员变量this.config,并且调用类的 this.init()方法。如果我们在写Servlet类时只要重写init(ServletConfig config)就可以了,但是init()不就成了多余的了吗?实际上init()方法是为了防止程序员在写Servlet类重写 init(ServletConfig config)时忘记写super.init(ServletConfig config),这样就容易造成出现空指针异常。而这就要求我们最好不要重写init(ServletConfig config)。( super.init(config)即 GenericServlet .init(config) ,即 this.config = config和 this.init()两句代码,如果没有这两句代码,由于Servlet中有这么一句代码:this.getServletConfig().getServletName(), getServletConfig()中的代码是return config , 程序员改写含参数的init方法时,如果忘了 super.init(config) ,那么 config为空 ,则 getServletName()为空 ,就会出现空指针异常 ,所以为了防止这个错误,程序员们一般改写init()这个方法,注:Tomcat调用的是 init(ServletConfig config)这个方法。 )
即指使用Servlet中的Init时要注意
init(servletconfig config)
² this.config = config