2011-07-19 74 views

回答

20

這是因爲它遵循Template Method設計模式。 doXxx()方法具有返回HTTP 405 方法未實現錯誤的所有默認行爲。如果這些方法都是抽象的,那麼即使您的業務需求根本不需要,您也將被迫覆蓋它們。這隻會導致樣板代碼和不明/不直觀的行爲。

+0

+1像往常一樣好的答案。 – Nishant

+0

聲明抽象的主要原因是強制所有的子類擴展HttpServlet類,並避免直接使用新運算符 – Stunner

0

可能是爲了防止通過創建實例來直接實例化HttpServlet。

換句話說,要確保每當使用HttpServlet時,它總是由子類擴展。


否......可以被覆蓋。這裏距離Herbert Shcildt的Java 2的例子中:完全參考

import java.io.*;

import javax.servlet.*;

public class HelloServlet extends GenericServlet

{

public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException

{

response.setContentType("text/html");

PrintWriter pw = response.getWriter();

pw.println("<B>Hello!");

pw.close();

}

}

+0

感謝您的回答。我還有一個疑問。什麼阻止我們重寫服務方法? – satheesh

+0

什麼都沒有。你可以自由覆蓋它。你自己嘗試過嗎? – BalusC

+0

不,先生,我在book.i會讀它會嘗試 – satheesh

8

它被聲明爲一個類而不是一個接口來實現設置servlet所需的大部分cruft/repeatable代碼。它被聲明爲abstract,因爲實例化一個只關注安裝並且不包含任何定製/用戶定義邏輯的「裸骨」servlet是沒有意義的。

-1

HttpServlet類被聲明爲抽象類爲什麼因爲太陽人不想創建一個對象到HttpServlet類,因此它被聲明爲抽象類。

你怎麼知道HttpServlet類沒有abstarct方法

公共類的TestServlet延伸的HttpServlet {} // 編譯上面的程序,如果我們能夠編譯再就是在HttpServlet類沒有抽象方法 我們需要騎車。

+2

「你怎麼知道HttpServlet類沒有abstarct方法」 - 看看Javadoc會給你這個信息。 –

0

HttpServlet類的所有方法都是具體的,即使我們聲明這個類爲抽象類,因爲任何類都可以具有null或更多抽象方法以及具體方法。 2>總是我們通過擴展HttpServlet.hence來使得我們的servlet只有派生的servlet類可以使對象。

+3

歡迎使用stackoverflow。這個線程是相當古老的。通常最好避免復活陳舊的線程,除非響應比以前的響應貢獻了重要的東西。 – Leigh

0

HttpServlet是一個沒有任何抽象方法的抽象類,因爲Web容器製造商通過聲明抽象方法限制開發人員創建對象。

Web容器應該調用doGet()和doPost(),它應該處理Servlet的所有生命週期。

如果我們被允許創建一個HttpServlet對象,我們限制容器調用doGet()和doPost(),但這是容器本身的工作,它應該處理Servlet的所有生命週期。因此,我們不應該創建HttpServlet的對象,所以這就是爲什麼它沒有任何抽象方法標記抽象類。

相關問題