GenericServletとHttpServlet



Genericservlet Vs Httpservlet



1 >>>>>>>>

HttpServletとGenericSeverletの違い



j avax.servlet. Servlet ---- サーブレットが実装する必要があるものを定義するインターフェースです。すべての実装のメソッドを定義します。これは、インターフェースが通常行うことです。

javax.servlet.GenericServlet ------ それは、プロトコルに依存しない汎用サーブレットです。 抽象的であるため、直接インスタンス化することはできません。いつかHTTP以外のプロトコル用のサーブレットを作成する必要がある場合に拡張できるクラスです。



javax.servlet.http.HttpServlet -------は、HTTPプロトコルを介して通信する場合に拡張される抽象クラスです。ほとんどの場合、これだけを気にする必要があります。

サーブレット:-

  1. サーブレットは、個別のOSプロセスではなく、Webコンテナ内のスレッドとして実行されます。
  2. 最初のリクエストが最初に来たときに作成されるオブジェクトは1つだけで、他のリクエストは同じオブジェクトを共有します。
  3. サーブレットはプラットフォームに依存しません。
  4. サーブレットは高速です。

GenericServlet:-



  1. すべてのプロトコルに一般的。
  2. サーブレットインターフェイスを実装します。
  3. サービス方式を使用します。

HttpServlet:-

  1. HTTPプロトコルの場合のみ。
  2. GenericServletクラスを継承します。
  3. serviceメソッドの代わりにdoPost、doGetメソッドを使用します。

2 >>>>>>>>

HttpServlet

パブリック抽象クラス HttpServlet
拡張します GenericServlet
java.io.Serializableを実装します

Webサイトに適したHTTPサーブレットを作成するためにサブクラス化される抽象クラスを提供します。 HttpServletのサブクラス少なくとも1つのメソッド、通常は次の1つをオーバーライドする必要があります。

  • doGet、サーブレットがHTTPGETリクエストをサポートしている場合
  • doPost、HTTPPOSTリクエストの場合
  • doPut、HTTPPUTリクエストの場合
  • doDelete、HTTPDELETEリクエストの場合
  • initおよびdestroy、サーブレットの存続期間中保持されるリソースを管理します
  • getServletInfo、サーブレットがそれ自体に関する情報を提供するために使用します
コンストラクターの要約
HttpServlet ()
これは抽象クラスであるため、何もしません。
メソッドの概要
protected void doDelete ( HttpServletRequest req, HttpServletResponse resp)
サーブレットがDELETE要求を処理できるようにするために、サーバーによって(serviceメソッドを介して)呼び出されます。
protected void doGet ( HttpServletRequest req, HttpServletResponse resp)
サーバーによって(serviceメソッドを介して)呼び出され、サーブレットがGET要求を処理できるようにします。
protected void doHead ( HttpServletRequest req, HttpServletResponse resp)
保護されたserviceからHTTPHEADリクエストを受信しますメソッドとリクエストを処理します。
protected void doOptions ( HttpServletRequest req, HttpServletResponse resp)
サーブレットがOPTIONS要求を処理できるようにするために、サーバーによって(serviceメソッドを介して)呼び出されます。
protected void doPost ( HttpServletRequest req, HttpServletResponse resp)
サーブレットがPOSTリクエストを処理できるようにするために、サーバーによって(serviceメソッドを介して)呼び出されます。
protected void doPut ( HttpServletRequest req, HttpServletResponse resp)
サーブレットがPUT要求を処理できるようにするために、サーバーによって(serviceメソッドを介して)呼び出されます。
protected void doTrace ( HttpServletRequest req, HttpServletResponse resp)
サーブレットがTRACE要求を処理できるようにするために、サーバーによって(serviceメソッドを介して)呼び出されます。
protected long getLastModified ( HttpServletRequest req)
HttpServletRequestの時間を返しますオブジェクトが最後に変更されたのは、1970年1月1日午前0時からのミリ秒単位です。
protected void service ( HttpServletRequest req, HttpServletResponse resp)
パブリックから標準のHTTPリクエストを受信しますserviceメソッドとそれらをdoにディスパッチします XXX このクラスで定義されたメソッド。
void service ( ServletRequest req, ServletResponse res)
保護されたserviceにクライアント要求をディスパッチします方法。

httpservletが抽象的である理由

メソッドをオーバーライドせずにhttpservletクラスを拡張すると、役に立たないサーブレットが得られます。

GenericServlet

パブリック抽象クラス GenericServlet

java.lang.Objectを拡張します

実装 サーブレットServletConfig 、java.io.Serializable

コンストラクターの要約
GenericServlet ()
何もしません。
メソッドの概要
void destroy ()
サーブレットコンテナによって呼び出され、サーブレットがサービスを停止していることをサーブレットに示します。
String getInitParameter ( String name)
Stringを返します名前付き初期化パラメーターの値を含む、またはnullパラメータが存在しない場合。
Enumeration getInitParameterNames ()
サーブレットの初期化パラメータの名前をEnumerationとして返します。のStringオブジェクト、または空のEnumerationサーブレットに初期化パラメータがない場合。
ServletConfig getServletConfig ()
このサーブレットを返します ServletConfig オブジェクト。
ServletContext getServletContext ()
への参照を返します ServletContext このサーブレットが実行されている場所。
String getServletInfo ()
作成者、バージョン、著作権など、サーブレットに関する情報を返します。
String getServletName ()
このサーブレットインスタンスの名前を返します。
void init ()
super.init(config)を呼び出す必要がないようにオーバーライドできる便利なメソッド。
void init ( ServletConfig config)
サーブレットがサービスに配置されていることをサーブレットに示すために、サーブレットコンテナによって呼び出されます。
void log ( String msg)
指定されたメッセージをサーブレットのログファイルに書き込み、先頭にサーブレットの名前を付けます。
void log ( String message, Throwable t)
指定されたThrowableの説明メッセージとスタックトレースを書き込みますサーブレットの名前が前に付いたサーブレットログファイルの例外。
abstract void service ( ServletRequest req, ServletResponse res)
サーブレットがリクエストに応答できるようにするためにサーブレットコンテナによって呼び出されます。

3 >>>>>>>>

Service()またはtoGet()、toPost()をいつ使用する必要がありますか?

doGet()の違いおよびdoPost()メソッドは、HttpServletで呼び出されるというものです。サーブレットがそのservice()によって拡張されることHTTPプロトコルリクエストからGETまたはPOSTリクエストを受信するときのメソッド。

GETリクエストは、 取得する サーバーからのリソース。これは、ブラウザがWebページを要求する場合です。リクエストでパラメータを指定することもできますが、 全体としてのパラメータの長さは制限されています 。これは、html:またはでこのように宣言されたWebページのフォームの場合です。

POSTリクエストは、 役職 (送信する)フォームデータをサーバー上のリソースに送信します。これは、htmlでこのように宣言されたWebページのフォームの場合です。この場合、パラメータのサイズははるかに大きくなる可能性があります。

GenericServlet service()がありますクライアント要求が行われたときに呼び出されるメソッド。これは、着信要求の両方によって呼び出され、HTTP要求がそのままサーブレットに渡されることを意味します(自分で解析を行う必要があります)。

HttpServlet代わりにdoGet()がありますおよびdoPost()クライアント要求がGETまたはPOSTのときに呼び出されるメソッド。これは、リクエストの解析がサーブレットによって行われることを意味します。適切なメソッドが呼び出され、リクエストパラメータを読み取るための便利なメソッドがあります。

注意: doGet()およびdoPost()メソッド(および他のHttpServletメソッド)はservice()によって呼び出されます方法。

結論として、

HTTPプロトコルクライアント(通常はブラウザ)によって行われたGETまたはPOSTリクエストに応答する必要がある場合は、遠慮なく拡張してくださいHttpServlet便利な方法を使用します。
HTTPプロトコルを使用していないクライアントからの要求に応答する必要がある場合は、service()を使用する必要があります。

賛成票 22 反対票

これがservice()の方法です通常は実装されます( 非常に単純化 ):

protected void service(HttpServletRequest req, HttpServletResponse resp) { String method = req.getMethod() if (method.equals(METHOD_GET)) { doGet(req, resp) } else if (method.equals(METHOD_HEAD)) { doHead(req, resp) } else if (method.equals(METHOD_POST)) { doPost(req, resp) } else if (method.equals(METHOD_PUT)) { doPut(req, resp) } else if (method.equals(METHOD_DELETE)) { doDelete(req, resp) } else if (method.equals(METHOD_OPTIONS)) { doOptions(req,resp) } else if (method.equals(METHOD_TRACE)) { doTrace(req,resp) } else { resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg) } }