本節書摘來自異步社群《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節。