|
|||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
java.lang.Object
|
+--javax.servlet.GenericServlet
|
+--javax.servlet.http.HttpServlet
Webサイトに適したHTTPサーブレットを生成するために、サブクラス化を前提とする抽象クラスを提供します。
HttpServletのサブクラスでは、少なくとも、以下に挙げられている1つのメソッドをオーバーライドする必要があります。
doGetメソッド, Servletが HTTP GETリクエストをサポートする場合
doPostメソッド, HTTP POSTリクエストをサポートする場合
doPutメソッド, HTTP PUTリクエストをサポートする場合
doDeleteメソッド, HTTP DELETEリクエストをサポートする場合
initメソッド および destroyメソッド, Servletのライフサイクルを維持するリソースを管理したい場合
getServletInfoメソッド, Servletが自身の情報を提供する目的で使用する場合
serviceメソッドをオーバーライドする理由は、ほとんどありません。
serviceメソッドは、各々のHTTPリクエストに対応するハンドラ(前述のdoXXXメソッド)にディスパッチすることによって標準HTTPリクエストを処理します。
同様に、doOptionsメソッド、および、doTraceメソッドをオーバーライドする理由も、ほとんどありません。
一般的に、Servletはマルチスレッド・サーバ上で実行されるので、 サーブレットはリクエストを並行的に受け付けなければならず、共有リソースへのアクセスの同期化などの注意が必要となります。 共有リソースには、インスタンス変数またはクラス変数のようなメモリデータ、および、ファイル、データベース・コネクション、ネットワーク・コネクションのような外部オブジェクトが含まれます。 Javaプログラム上におけるマルチスレッド処理についてのさらなる情報源として、 Javaチュートリアルのマルチスレッドプログラミングの章 を参考にしてください。
| コンストラクタの概要 | |
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 |
| コンストラクタの詳細 |
public HttpServlet()
| メソッドの詳細 |
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
IOException
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)protected long getLastModified(HttpServletRequest req)
HttpServletRequestオブジェクトが最後に更新された時間を返します。
更新された時間が不明の場合、このメソッドは負数(デフォルト値)を返します。
HTTP GETリクエストをサポートし、最後に更新された時間をすぐに決定可能なServletでは、このメソッドをオーバーライドするべきです。 こうすることにより、ブラウザやプロキシのキャッシュ処理をさらに効果的にさせ、サーバおよびネットワークにおけるリソースの負荷を軽減させることが可能です。
req - Servletへ要求した HttpServletRequest オブジェクト
HttpServletRequestオブジェクトが最後に更新された時間を
long型の整数値で返し、更新された時間が不明の場合は -1 を返す
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に相当するリクエストが処理できない場合
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)
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に相当するリクエストが処理できない場合
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に相当するリクエストが処理できない場合
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に相当するリクエストが処理できない場合
protected void doTrace(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
IOException
serviceメソッド経由で)サーバによって呼び出されます。
TRACEは、TRACEリクエストとして送られたヘッダ情報をクライアントへ返すことによって、それらをデバッグ目的で使用することが可能となります。
req - クライアントがServletへ要求したリクエスト内容を含む HttpServletRequest オブジェクトresp - Servletがクライアントに返すレスポンス内容を含む HttpServletResponse オブジェクト
IOException - ServletがTRACEリクエストを処理している間に入出力エラーが発生した場合
ServletException - TRACEに相当するリクエストが処理できない場合
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)
public void service(ServletRequest req,
ServletResponse res)
throws ServletException,
IOException
serviceメソッドにディスパッチします。
このメソッドをオーバーライドする必要はありません。
Servlet 内の serviceGenericServlet 内の servicereq - クライアントが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.