本节书摘来自异步社区《servlet、jsp和spring mvc初学指南》一书中的第1章,第1.8节,作者:【加】budi kurniawan(克尼亚万) , 【美】paul deck著,更多章节内容可以访问云栖社区“异步社区”公众号查看
前面的例子中展示了如何通过实现servlet接口来编写servlet。但你注意到没有?它们必须给servlet中的所有方法都提供实现,即便其中有一些根本就没有包含任何代码。此外,还需要将servletconfig对象保存到类级变量中。
值得庆幸的是genericservlet抽象类的出现。本着尽可能使代码简单的原则, genericservlet实现了servlet和servletconfig接口,并完成以下任务:
将init方法中的servletconfig赋给一个类级变量,以便可以通过调用getservletconfig获取。
为servlet接口中的所有方法提供默认的实现。
提供方法,包围servletconfig中的方法。
genericservlet通过将servletconfig赋给init方法中的类级变量servletconfig,来保存servletconfig。下面就是genericservlet中的init实现:
public void init(servletconfig servletconfig)
}
这<code>`</code>
意味着,可以通过覆盖没有参数的init方法来编写初始化代码,servletconfig则仍然由genericservlet实例保存。
清单1.3中的genericservletdemoservlet类是对清单1.2中servletconfigdemoservlet类的改写。注意,这个新的servlet扩展了genericservlet,而不是实现servlet。
清单1.3 genericservletdemoservlet类
可见,通过扩展genericservlet,就不需要覆盖没有计划改变的方法。因此,代码变得更加整洁。在清单 1.3 中,唯一被覆盖的方法是 service 方法。而且,不必亲自保存servletconfig。
利用下面这个url调用servlet,其结果应该与servletconfigdemoservlet相似:
<code>http://localhost:8080/app01a/generic</code>
即使genericservlet是对servlet一个很好的加强,但它也不常用,因为它毕竟不像httpservlet那么高级。httpservlet才是主角,在现实的应用程序中被广泛使用。关于它的详情,请查阅1.9节。