javax.servlet.http
クラス HttpServlet

java.lang.Object
  |
  +--javax.servlet.GenericServlet
        |
        +--javax.servlet.http.HttpServlet
すべての実装インタフェース:
Serializable, Servlet, ServletConfig

public abstract class HttpServlet
extends GenericServlet
implements Serializable

Webサイトに適したHTTPサーブレットを生成するために、サブクラス化を前提とする抽象クラスを提供します。 HttpServletのサブクラスでは、少なくとも、以下に挙げられている1つのメソッドをオーバーライドする必要があります。

serviceメソッドをオーバーライドする理由は、ほとんどありません。 serviceメソッドは、各々のHTTPリクエストに対応するハンドラ(前述のdoXXXメソッド)にディスパッチすることによって標準HTTPリクエストを処理します。

同様に、doOptionsメソッド、および、doTraceメソッドをオーバーライドする理由も、ほとんどありません。

一般的に、Servletはマルチスレッド・サーバ上で実行されるので、 サーブレットはリクエストを並行的に受け付けなければならず、共有リソースへのアクセスの同期化などの注意が必要となります。 共有リソースには、インスタンス変数またはクラス変数のようなメモリデータ、および、ファイル、データベース・コネクション、ネットワーク・コネクションのような外部オブジェクトが含まれます。 Javaプログラム上におけるマルチスレッド処理についてのさらなる情報源として、 Javaチュートリアルのマルチスレッドプログラミングの章 を参考にしてください。

バージョン:
$Version$
作成者:
Various
関連項目:
直列化された形式

コンストラクタの概要
HttpServlet()
          抽象クラスであるため、何も行われません。
 
メソッドの概要
protected  void doDelete(HttpServletRequest req, HttpServletResponse resp)
           ServletにDELETEリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。
protected  void doGet(HttpServletRequest req, HttpServletResponse resp)
          ServletにGETリクエストを処理可能にさせるため、(serviceメソッドを通じて)サーバによって呼び出されます。
protected  void doHead(HttpServletRequest req, HttpServletResponse resp)
           protectedと定義されたserviceメソッド経由でHTTP HEADリクエストを受け取り、リクエストを処理します。
protected  void doOptions(HttpServletRequest req, HttpServletResponse resp)
           ServletにOPTIONSリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。
protected  void doPost(HttpServletRequest req, HttpServletResponse resp)
           ServletにPOSTリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。
protected  void doPut(HttpServletRequest req, HttpServletResponse resp)
           ServletにPUTリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。
protected  void doTrace(HttpServletRequest req, HttpServletResponse resp)
          ServletにTRACEリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。
protected  long getLastModified(HttpServletRequest req)
          1970年1月1日 00:00:00 GMTからのミリ秒で、HttpServletRequestオブジェクトが最後に更新された時間を返します。
protected  void service(HttpServletRequest req, HttpServletResponse resp)
           publicで定義されたserviceメソッド経由で標準HTTPリクエストを受け取り、それらをこのクラスで定義されたdoXXXメソッドにディスパッチします。
 void service(ServletRequest req, ServletResponse res)
          クライアントからのリクエストを、protectedと定義されたserviceメソッドにディスパッチします。
 
クラス javax.servlet.GenericServlet から継承したメソッド
destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, init, log, log
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

HttpServlet

public HttpServlet()
抽象クラスであるため、何も行われません。

メソッドの詳細

doGet

protected void doGet(HttpServletRequest req,
                     HttpServletResponse resp)
              throws ServletException,
                     IOException
ServletにGETリクエストを処理可能にさせるため、(serviceメソッドを通じて)サーバによって呼び出されます。

GETリクエストをサポートするこのメソッドをオーバーライドすることにより、HTTP HEADリクエストも自動的にサポートします。 HEADリクエストとは、レスポンスのボディ部をまったく含めず、リクエストのヘッダ項目のみが返される GETリクエストです。

このメソッドをオーバーライドするときは、リクエストデータの取得、レスポンスヘッダの出力、レスポンスのWriterまたはOutputStreamオブジェクトの取得、最後にレスポンスデータの出力、という順になります。 その際、コンテンツタイプやエンコーディングを含めるのがベストです。 レスポンスを返すためのPrintWriterオブジェクトを使用する際には、PrintWriterにアクセスする前にContent-Typeをセットするようにしてください。

HTTPの規約によると、ヘッダ情報はレスポンスのボディの前に送信しなければならないため、 Servletコンテナは、レスポンスを出力する前にヘッダ情報を出力しなければなりません。

Servletコンテナがクライアントにレスポンスを返すための持続的なコネクションを利用できるよう、可能な限り、(ServletResponse.setContentLength(int)メソッドを使って)Content-Lengthヘッダをセットし、パフォーマンスを改善できるようにします。 レスポンス全体がレスポンスバッファ内に収まった場合、Content-Lengthが自動的にセットされます。

GETメソッドは安全であるべきであり、言い換えると、ユーザが責任を負うための副作用が無いようにすべきだということです。 例えば、ほとんどのフォームクエリには副作用がありません。 クライアントのリクエストにより、すでにストア済のデータを変更させる場合は、そのリクエスト方法として、他のHTTPメソッドを使用すべきです。

またGETメソッドは、冪等(idempotent)であるべきであり、それは、同じ要求を安全に繰り返し発行させることが可能であることを意味します。 時々メソッドを安全にすることがまた、冪等(idempotent)とすることもあります。 例えば、クエリを繰り返し発行することは冪等(idempotent)でかつ安全ですが、オンライン製品を購入、もしくは、データを変更するようなときは、必ずしも安全もしくは冪等(idempotent)であるとは限りません。

リクエストが正しいフォーマットでない場合、doGetメソッドはHTTP "Bad Request" メッセージを返します。

パラメータ:
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクト
resp - Servletがクライアントに返すレスポンス内容を含む HttpServletResponse オブジェクト
例外:
IOException - ServletがGETリクエストを処理している間に入出力エラーが発生した場合
ServletException - GETに相当するリクエストが処理できない場合
関連項目:
ServletResponse.setContentType(java.lang.String)

getLastModified

protected long getLastModified(HttpServletRequest req)
1970年1月1日 00:00:00 GMTからのミリ秒で、HttpServletRequestオブジェクトが最後に更新された時間を返します。 更新された時間が不明の場合、このメソッドは負数(デフォルト値)を返します。

HTTP GETリクエストをサポートし、最後に更新された時間をすぐに決定可能なServletでは、このメソッドをオーバーライドするべきです。 こうすることにより、ブラウザやプロキシのキャッシュ処理をさらに効果的にさせ、サーバおよびネットワークにおけるリソースの負荷を軽減させることが可能です。

パラメータ:
req - Servletへ要求した HttpServletRequest オブジェクト
戻り値:
1970年1月1日 00:00:00 GMTからのミリ秒で、 HttpServletRequestオブジェクトが最後に更新された時間を long型の整数値で返し、更新された時間が不明の場合は -1 を返す

doHead

protected void doHead(HttpServletRequest req,
                      HttpServletResponse resp)
               throws ServletException,
                      IOException

protectedと定義されたserviceメソッド経由でHTTP HEADリクエストを受け取り、リクエストを処理します。 クライアントは、Content-Type や Content-Length といったレスポンスのヘッダを参照したいときに、HEADリクエストを送信します。 HTTP HEADメソッドは、Content-Lengthヘッダを正確にセットするため、レスポンスの出力バイト数をカウントします。

このメソッドをオーバーライドすると、レスポンスのボディを返すことを回避でき、動作を保証する目的でレスポンスのヘッダ情報を直接セットすることができます。 実装したdoHeadメソッドが、安全でかつ冪等(idempotent)(つまり、一つのHTTP HEADリクエストを何回か発行し、正常に到達させることを保証する)であるかを確かめてみてください。

HTTP HEADリクエストが正しいフォーマットでない場合、doHeadメソッドはHTTP "Bad Request"メッセージを返します。

パラメータ:
req - Servletへ渡された HttpServletRequest オブジェクト
resp - Servletがヘッダ情報をクライアントへ返すために使用する HttpServletResponse オブジェクト
例外:
IOException - 入出力エラーが発生した場合
ServletException - HEADに相当するリクエストが処理できない場合

doPost

protected void doPost(HttpServletRequest req,
                      HttpServletResponse resp)
               throws ServletException,
                      IOException

ServletにPOSTリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。 HTTP POSTメソッドは、クライアントが無制限の長さのデータをWebサーバへ一回で送信することを可能にし、クレジットカード番号のような情報を送るときに役立ちます。

このメソッドをオーバーライドするときは、リクエストデータの取得、レスポンスヘッダの出力、レスポンスのWriterもしくはOutputStreamオブジェクトの取得、そして最後に、レスポンスデータの出力、という順になります。 その際、コンテンツタイプやエンコーディングの指定を含めるのがベストです。 レスポンスを返すPrintWriterオブジェクトを使用する際には、PrintWriterオブジェクトにアクセスする前に、コンテンツタイプを指定するようにします。

HTTPの規約によると、ヘッダ情報はレスポンスのボディの前に送信しなければならないため、 Servletコンテナは、レスポンスを出力する前にヘッダ情報を出力しなければなりません。

Servletコンテナがクライアントにレスポンスを返すための持続的なコネクションを利用できるよう、可能な限り、(ServletResponse.setContentLength(int)メソッドを利用して)Content-Lengthヘッダをセットし、パフォーマンスを改善できるようにします。 レスポンス全体がレスポンスバッファ内で収まった場合、コンテンツの長さは自動的にセットされます。

HTTP 1.1 の Chunked エンコーディング(レスポンスにTransfer-Encodingヘッダが含まれることを意味する)を使用しているときは、Content-Lengthヘッダを指定しないでください。

このメソッドは、安全もしくは冪等(idempotent)である必要はありません。 POSTを通してリクエストされたオペレーションは、例えば、ストア済データの更新やオンライン商品の購入のように、ユーザが責任を負わなければいけない副作用があっても構いません。

HTTP POSTリクエストが正しいフォーマットでない場合、doPostメソッドはHTTP "Bad Request"メッセージを返します。

パラメータ:
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクト
resp - Servletがクライアントに返すレスポンス内容を含む HttpServletResponse オブジェクト
例外:
IOException - ServletがPOSTリクエストを処理している間に入出力エラーが発生した場合
ServletException - POSTに相当するリクエストが処理できない場合
関連項目:
ServletOutputStream, ServletResponse.setContentType(java.lang.String)

doPut

protected void doPut(HttpServletRequest req,
                     HttpServletResponse resp)
              throws ServletException,
                     IOException

ServletにPUTリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。 PUTオペレーションによって、クライアントがサーバ上にファイルを配置させることが可能となります。それは FTP経由ファイルを転送することとよく似ています。

このメソッドをオーバーライドするときは、リクエストとして送られたあらゆるコンテンツヘッダ(Content-Length, Content-Type, Content-Transfer-Encoding, Content-Encoding, Content-Base, Content-Language, Content-Location, Content-MD5, and Content-Rangeを含む)に対して、一切手をつけないようにしてください。 メソッドがコンテンツヘッダを処理できない場合、エラーメッセージ(HTTP 501 - Not Implemented)を発生させ、リクエストを無視しなければなりません。 HTTP 1.1 に関する詳細な情報は、RFC 2068を参照してください。(訳注: RFC 2068 は、RFC 2616, 2817 に置き換えられています。)

このメソッドは、安全もしくは冪等(idempotent)である必要はありません。 doPutメソッドを実行するオペレーションは、ユーザが責任を負わなければいけない副作用があっても構いません。 このメソッドを使うと、何らかの影響を及ぼすようなURLのコピーを一時記憶装置に保存するのに役に立つかもしれません。

HTTP PUTリクエストが正しいフォーマットでない場合、doPutメソッドはHTTP "Bad Request"メッセージを返します。

パラメータ:
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクト
resp - Servletがクライアントに返すレスポンス内容を含む HttpServletResponse オブジェクト
例外:
IOException - ServletがPUTリクエストを処理している間に入出力エラーが発生した場合
ServletException - PUTに相当するリクエストが処理できない場合

doDelete

protected void doDelete(HttpServletRequest req,
                        HttpServletResponse resp)
                 throws ServletException,
                        IOException

ServletにDELETEリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。 DELETEオペレーションによって、クライアントがサーバ上のドキュメントもしくWebページを削除させることが可能となります。

このメソッドは、安全もしくは冪等(idempotent)である必要はありません。 DELETEを通してリクエストされたオペレーションは、ユーザが責任を負わなければならない副作用があっても構いません。 このメソッドを使うと、何らかの影響を及ぼすようなURLのコピーを一時記憶装置に保存するのに役に立つかもしれません。

HTTP DELETEリクエストが正しいフォーマットでない場合、doDeleteメソッドはHTTP "Bad Request"メッセージを返します。

パラメータ:
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクト
resp - Servletがクライアントに返すレスポンス内容を含む HttpServletResponse オブジェクト
例外:
IOException - ServletがDELETEリクエストを処理している間に入出力エラーが発生した場合
ServletException - DELETEに相当するリクエストが処理できない場合

doOptions

protected void doOptions(HttpServletRequest req,
                         HttpServletResponse resp)
                  throws ServletException,
                         IOException

ServletにOPTIONSリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。 OPTIONSリクエストは、サーバのサポートするHTTPメソッドを決定し、適当なヘッダ情報を返します。 例えば、ServletにdoGetがオーバーライドされた場合、このメソッドは次のようなヘッダ情報を返します。

Allow: GET, HEAD, TRACE, OPTIONS

Servletが新たなHTTPメソッドを実装しない限り、すなわち、HTTP 1.1 で定義されてないHTTPメソッドでなければ、このメソッドをオーバーライドする必要はありません。

パラメータ:
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクト
resp - Servletがクライアントに返すレスポンス内容を含む HttpServletResponse オブジェクト
例外:
IOException - ServletがOPTIONSリクエストを処理している間に入出力エラーが発生した場合
ServletException - OPTIONSに相当するリクエストが処理できない場合

doTrace

protected void doTrace(HttpServletRequest req,
                       HttpServletResponse resp)
                throws ServletException,
                       IOException
ServletにTRACEリクエストを処理可能にさせるため、(serviceメソッド経由で)サーバによって呼び出されます。 TRACEは、TRACEリクエストとして送られたヘッダ情報をクライアントへ返すことによって、それらをデバッグ目的で使用することが可能となります。

パラメータ:
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクト
resp - Servletがクライアントに返すレスポンス内容を含む HttpServletResponse オブジェクト
例外:
IOException - ServletがTRACEリクエストを処理している間に入出力エラーが発生した場合
ServletException - TRACEに相当するリクエストが処理できない場合

service

protected void service(HttpServletRequest req,
                       HttpServletResponse resp)
                throws ServletException,
                       IOException

publicで定義されたserviceメソッド経由で標準HTTPリクエストを受け取り、それらをこのクラスで定義されたdoXXXメソッドにディスパッチします。 このメソッドは、Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)メソッドのHTTP仕様バージョンです。 このメソッドをオーバーライドする必要はありません。

パラメータ:
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクト
resp - Servletがクライアントに返すレスポンス内容を含む HttpServletResponse オブジェクト
例外:
IOException - ServletがTRACEリクエストを処理している間に入出力エラーが発生した場合
ServletException - TRACEに相当するリクエストが処理できない場合
関連項目:
Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)

service

public void service(ServletRequest req,
                    ServletResponse res)
             throws ServletException,
                    IOException
クライアントからのリクエストを、protectedと定義されたserviceメソッドにディスパッチします。 このメソッドをオーバーライドする必要はありません。

定義:
インタフェース Servlet 内の service
定義:
クラス GenericServlet 内の service
パラメータ:
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクト
res - Servletからのレスポンスになる ServletResponse オブジェクト
例外:
IOException - ServletがTRACEリクエストを処理している間に入出力エラーが発生した場合
ServletException - TRACEに相当するリクエストが処理できない場合
関連項目:
Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)


このドキュメントは、Ja-Jakarta Project により翻訳されました。コメントがある場合は、jajakarta-report@jajakarta.good-day.netまでお願いします。

Copyright © 1999-2002 The Apache Software Foundation. All Rights Reserved.