|
|||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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リクエストに対応するハンドラ(前述のdo
XXXメソッド)にディスパッチすることによって標準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リクエストを受け取り、それらをこのクラスで定義されたdo XXXメソッドにディスパッチします。
|
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リクエストを受け取り、それらをこのクラスで定義されたdo
XXXメソッドにディスパッチします。
このメソッドは、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
内の 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.