GenericServletとHttpServletの主な違いは、GenericServletはプロトコルに依存せず、HTTP、SMTP、FTP、CGIなどの任意のプロトコルで使用できるのに対し、HttpServletはHTTPプロトコルにのみ使用されるという点です。
サーブレットは、スケーラブルで堅牢なWebアプリケーションの開発を支援するJava技術です。
プラットフォームに依存しないサーバーサイドコンポーネントです。
また、Servletは、Servletインタフェースの実装、GenericServlet抽象クラスの拡張、HttpServlet抽象クラスの拡張の3つの方法で記述することが可能である。
Servletインターフェースは、GenericServletとHttpServletのスーパーインターフェースです。
5つの抽象メソッドを持ち、GenericServletとHttpServletはこれらのメソッドを継承しています。
GenericServletとは
GenericServletは、Servletインターフェイスの直系のサブクラスです。
つまり、Servletインターフェースから継承したメソッドである service () は、GenericServletでは抽象メソッドです。
Servletインターフェースから継承した他の4つのメソッドはGenericServletに実装されています。
GenericServletクラスを継承するプログラマは、service () メソッドをオーバーライドして、その実装を記述する必要があります。
また、GenericServletは、SMTP、CGI、FTP、HTTPなどのプロトコルで使用されます。
そのため、プロトコルに依存しません。
つまり、WebがHTTPプロトコルに標準化されていなかった頃にも使用することができます。
HttpServeltとは
現在、ほとんどのWebアプリケーションはHTTPプロトコルを使用しています。
HttpServletは、HTTPプロトコルをサポートするために設計されています。
また、このクラスは抽象クラスです。
さらに、HttpServletの直属のスーパークラスはGenericServletです。
HttpServletは、GenericServletのserviceメソッドをオーバーライドしています。
サービスメソッドと同じパラメータを持つdoGet()またはdoPost()を使用して、サービス(メソッド)を置き換えることが可能です。
HttpServletはGenericServletのサブクラスであり、GenericServletのプロパティとメソッドを継承しています。
従って、HttpServletを拡張する場合、両クラスの機能を利用することができます。
GenericServletとHttpServletの相違点
定義
GenericServletは、Servlet、ServletConfigおよびSerializableインターフェイスを実装したクラスで、これらのインターフェイスのうちサービスメソッドを除くすべてのメソッドの実装を提供するものです。
HttpServletは、GenericServletを拡張し、HTTP固有のメソッドを提供するSerializableインタフェースを実装したクラスです。
したがって、GenericServletとHttpServletの根本的な違いを示している。
プロトコル依存性
GenericServletとHttpServletの大きな違いは、GenericServletはプロトコルに依存せず、HttpServletはプロトコルに依存することである。
サービス方法
また、GenericServletでは、サービスメソッドは抽象化されています。
また、GenericServletでは、サービスメソッドは抽象的であるが、HttpServletでは、サービスメソッドは非抽象的です。
この点もGenericServletとHttpServletの重要な違いと言える。
署名
また、public abstract class GenericServletは、java.lang.Objectを継承し、Servlet、ServletConfig、および、java.io.Serializableを実装しています。
関連するサブクラス
GenericServletは、Servletインターフェースの直接のサブクラスです。
一方、HttpServletは、GenericServletの直接のサブクラスです。
定義済みパッケージ
javax.servletパッケージはGenericServletを定義していますが、javax.servlet.httpパッケージはHttpServletを定義しています。
この点もGenericServletとHttpServletの違いです。
Extending / Implementing
さらに、GenericServletはObjectクラスを拡張し、Servlet、ServletConfig、Serializableの各インターフェイスを実装しています。
HttpServletはGenericServeltを継承し、Serializableインターフェイスを実装しています。
ユーザビリティ
GenericServletとHttpServletのもう一つの違いは、GenericServletは一般的に使われていないのに対し、HttpServletは一般的に使われている点です。
結論
GenericServletとHttpServletの主な違いは、GenericServletがHTTP、SMTP、FTP、CGIなどあらゆるプロトコルで使用できるプロトコル独立型であるのに対し、HttpServletはプロトコル依存型で、HTTPプロトコルでのみ使用されることである。