了解GenericServlet
对于init为什么有两个方法,我们首先需要了解GenericServlet,
GenericServlet是Servlet接口的实现类。为了避免代码冗杂,如果我们
每一个类都去实现Servlet接口,那么就要去实现Servlet里面的5种方法,
但是我们知道,只有service()方法才是我们经常使用的,init()方法只有在客户提出请求访问时
才会被创建一次,也就是我们通常所说的“单例”,而destroy()方法只有
在关闭服务器的时候才会被执行,所以针对于此,我们实现了利用GenericServlet
来实现Servlet接口,以后在创建一个类的时候就可以直接继承GenericServlet
,也就是通常所说的适配器。
GenericServlet部分源码
init()两个方法原因
所以归结回来,init()为什么会有两个方法,因为GenericServlet里面的
init方法里面有ServletConfig对象,
这个对象是tomcat服务器首先创建的,然后再去调用init方法,
将ServletConfig对象传给了init()方法
然后这个对象目前在init方法参数上属于局部变量,
但是这个对象肯定以后要在service方法中使用,
所以我们要将其变为成员变量,再加一个get函数,
以后调用get函数就可以使用该对象了。
但是我们在继承GenericServlet的一个子类里面,
如果我们需要重写init方法,子类就覆盖了
GenericServlet的init方法,
那么在GenericServlet里面this.config=config代码就不试用了,
也就是说
GenericServlet的实例变量config的值为null,
那么所有依赖config的方法都不能使用了。为了避免此种情况,
我们会在GenericServlet里面再写一个无参的init方法,
那么就在继承的那个类重写这个无参的init方法,就不会出现我们上述
所说的情况了