HttpServlet
なぜそのクラスに抽象メソッドがなくても抽象クラスとして宣言されていますか?HttpServletクラスが抽象クラスとして宣言されているのはなぜですか?
答えて
Template Methodデザインパターンに従っているからです。 doXxx()
メソッドには、HTTP 405 メソッド未実装エラーを返すすべての既定の動作があります。それらのメソッドがすべて抽象的だった場合、ビジネス要件ではそれがまったく必要ない場合でも、すべてのメソッドをオーバーライドする必要があります。それは、定型的なコードと不特定/非直感的な動作をもたらすだけです。
おそらく、そのインスタンスを作成することによって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();
}
}
サーブレットを設定するために必要とされる大部分の反復可能/反復可能コードを実装するためのインタフェースではなく、クラスとして宣言されています。それはabstract
と宣言されています。これは、設定だけに注意を払い、カスタム/ユーザ定義のロジックを含んでいない "ベアボーン"サーブレットをインスタンス化する意味がないためです。
HttpServletクラスは抽象クラスとして宣言されています。なぜなら、太陽の人々は、この理由でHttpServletクラスへのオブジェクトを作成したくないからです。抽象クラスとして宣言されています。我々はHttpServletのクラスには抽象メソッド がない、次にコンパイルすることができます場合は、HttpServletのクラスが
パブリッククラスTestServletはHttpServletを拡張何abstarctメソッドを持っていないことを知ってどのように
{ } //上記のプログラムをコンパイル私たちは乗り越える必要があります。
を使用してオブジェクトを直接作成することを避けることです。「HttpServletクラスにはabstarctメソッドがないことをどのように知っているか」 - Javadocを見ると、情報。 –
1>どのクラスもnull以上の抽象メソッドと具象メソッドを持つことができるので、このクラスを抽象として宣言しても、HttpServletクラスのすべてのメソッドは具体的です。 2>常にHttpServlet.henceを継承してサーブレットを作成し、派生サーブレットクラスのみがオブジェクトを作成できます。
ようこそstackoverflowへ。このスレッドはかなり古いです。一般に、応答が以前の応答よりも重要なものでない限り、失効したスレッドを復活させないようにするのが最善です。 – Leigh
HttpServletは抽象メソッドを持たない抽象クラスです.Webコンテナの製造元が抽象宣言をして開発者にオブジェクトの作成を制限するため、HttpServletは抽象メソッドを持たない抽象クラスです。
WebコンテナはdoGet()とdoPost()を呼び出す必要があり、Servletのすべてのライフサイクルを処理する必要があります。
HttpServletのオブジェクトを作成することが許可されている場合、コンテナをdoGet()とdoPost()を呼び出すように制限していますが、これはコンテナ自体の仕事であり、Servletのすべてのライフサイクルを処理する必要があります。
そのため、HttpServletのオブジェクトを作成しないでください。そのため、抽象メソッドを持たずに抽象クラスとしてマークされています。
それは彼らが設計した方法なので。建設的ではない。 – EJP