天天看点

《Servlet、JSP和Spring MVC初学指南》——1.8 GenericServlet

本节书摘来自异步社区《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节。