2011-07-19 10 views

答えて

20

Template Methodデザインパターンに従っているからです。 doXxx()メソッドには、HTTP 405 メソッド未実装エラーを返すすべての既定の動作があります。それらのメソッドがすべて抽象的だった場合、ビジネス要件ではそれがまったく必要ない場合でも、すべてのメソッドをオーバーライドする必要があります。それは、定型的なコードと不特定/非直感的な動作をもたらすだけです。

+0

いつものように+1素晴らしい答え。 – Nishant

+0

抽象宣言の主な理由は、すべてのサブクラスがHttpServletクラスを拡張し、新しいオペレータ – Stunner

0

おそらく、そのインスタンスを作成することによってHttpServletの直接的なインスタンス化を防ぐことができます。

つまり、HttpServletが使用されるたびに常にサブクラスによって拡張されるようにする必要があります。


いいえ...オーバーライドすることができます。ここでハーバート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

あなたのお返事ありがとうございます。もう1つの疑問があります。サービス方法を無効にすることができないのはなぜですか? – satheesh

+0

何もありません。あなたは自由にそれを無効にすることができます。あなたはそれを自分で試しましたか? – BalusC

+0

book.iで読むことはありません – satheesh

8

サーブレットを設定するために必要とされる大部分の反復可能/反復可能コードを実装するためのインタフェースではなく、クラスとして宣言されています。それはabstractと宣言されています。これは、設定だけに注意を払い、カスタム/ユーザ定義のロジックを含んでいない "ベアボーン"サーブレットをインスタンス化する意味がないためです。

-1

HttpServletクラスは抽象クラスとして宣言されています。なぜなら、太陽の人々は、この理由でHttpServletクラスへのオブジェクトを作成したくないからです。抽象クラスとして宣言されています。我々はHttpServletのクラスには抽象メソッド がない、次にコンパイルすることができます場合は、HttpServletのクラスが

パブリッククラスTestServletはHttpServletを拡張何abstarctメソッドを持っていないことを知ってどのように

{ } //上記のプログラムをコンパイル私たちは乗り越える必要があります。

+2

を使用してオブジェクトを直接作成することを避けることです。「HttpServletクラスにはabstarctメソッドがないことをどのように知っているか」 - Javadocを見ると、情報。 –

0

1>どのクラスもnull以上の抽象メソッドと具象メソッドを持つことができるので、このクラスを抽象として宣言しても、HttpServletクラスのすべてのメソッドは具体的です。 2>常にHttpServlet.henceを継承してサーブレットを作成し、派生サーブレットクラスのみがオブジェクトを作成できます。

+3

ようこそstackoverflowへ。このスレッドはかなり古いです。一般に、応答が以前の応答よりも重要なものでない限り、失効したスレッドを復活させないようにするのが最善です。 – Leigh

0

HttpServletは抽象メソッドを持たない抽象クラスです.Webコンテナの製造元が抽象宣言をして開発者にオブジェクトの作成を制限するため、HttpServletは抽象メソッドを持たない抽象クラスです。

WebコンテナはdoGet()とdoPost()を呼び出す必要があり、Servletのすべてのライフサイクルを処理する必要があります。

HttpServletのオブジェクトを作成することが許可されている場合、コンテナをdoGet()とdoPost()を呼び出すように制限していますが、これはコンテナ自体の仕事であり、Servletのすべてのライフサイクルを処理する必要があります。

そのため、HttpServletのオブジェクトを作成しないでください。そのため、抽象メソッドを持たずに抽象クラスとしてマークされています。