public abstract class HttpServlet extends GenericServlet
Webサイトに適したHTTPサーブレットを作成するためにサブクラスが作成される抽象クラスを提供します。
HttpServlet
のサブクラスはひとつ以上のメソッドをオーバーライドする必要があります。通常は以下のうちのどれかです。
doGet
、サーブレットがHTTP GETリクエストをサポートしている場合
doPost
、HTTP POSTリクエスト用
doPut
、HTTP PUTリクエスト用
doDelete
、HTTP DELETETリクエスト用
init
と destroy
、サーブレットのライフサイクルで保持されているリソースの管理用
getServletInfo
、サーブレットが自身に関する情報を提供するために使用する
service
メソッドをオーバーライドする理由はほとんどありません。
service
メソッドは各HTTPのリクエストタイプの処理メソッド(上記のdo
XXXメソッド)に標準HTTPリクエストをディスパッチして処理します。
同様に、 doOptions
メソッドとdoTrace
メソッドをオーバーライドする理由もほとんどありません。
サーブレットは通常、サーバー上でマルチスレッドで実行されるため、フィルタは同時に行われるリクエストを処理し、共有リソースへのアクセスを同期するよう注意しなければなりません。 共有リソースにはインスタンス変数、クラス変数などのインメモリデータや、ファイル、データベース接続、ネットワーク接続などの外部オブジェクトが含まれます。 Javaプログラムで複数のスレッドを処理する方法の詳細は、Java Tutorial on Multithreaded Programmingを参照してください。
コンストラクタと説明 |
---|
HttpServlet()
このクラスはabstractクラスなので何もしません。
|
修飾子とタイプ | メソッドと説明 |
---|---|
protected void |
doDelete(HttpServletRequest req,
HttpServletResponse resp)
サーブレットがDELETEリクエストを処理できるようにするために(serviceメソッド経由で)サーバーによって呼び出されます。
|
protected void |
doGet(HttpServletRequest req,
HttpServletResponse resp)
サーブレットがGETリクエストを処理できるようにするために(serviceメソッド経由で)サーバーによって呼び出されます。
|
protected void |
doHead(HttpServletRequest req,
HttpServletResponse resp)
protectedな
service メソッドからHTTP HEADリクエストを受け取り、リクエストを処理します。 |
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 日 00:00:00 GMT からのミリ秒数で返します。 |
protected void |
service(HttpServletRequest req,
HttpServletResponse resp)
publicな
service メソッドから標準のHTTPリクエストを受け取りこのクラスで定義されているdo XXXメソッドにディスパッチします。 |
void |
service(ServletRequest req,
ServletResponse res)
クライアントからのリクエストをprotectedな
service メソッドにディスパッチします。 |
destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, init, log, log
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
GETリクエストをサポートするためにこのメソッドをオーバーライドすると、HTTP HEADリクエストも自動的にサポートされます。 HEADリクエストはレスポンスとしてボディがないものが返されるリクエストヘッダフィールドのみのGETリクエストです。
このメソッドをオーバーライドするときは、リクエストデータを読み込み、レスポンスヘッダーを書き、
レスポンスのWriterまたはOutputStream オブジェクトを取得し、最後にレスポンスデータを書き込みます。
コンテンツタイプとエンコーディングを含めることをお勧めします。
PrintWriter
オブジェクトを使用してレスポンスを返す場合はPrintWriter
オブジェクトにアクセスする前にコンテンツタイプを設定します。
サーブレットコンテナはレスポンスをコミットする前にヘッダーを書き込まなければいけません。
HTTPではレスポンスボディの前にヘッダーを送信する必要があるからです。
可能であれば(ServletResponse.setContentLength(int)
メソッドを使用して)Content-Lengthヘッダーを設定し、
サーブレットコンテナが永続的な接続を使用して応答をクライアントに返すようにし、パフォーマンスを向上させます。
コンテンツの長さはレスポンス全体がレスポンスバッファ内に収まる場合には自動的に設定されます。
HTTP 1.1チャンクエンコーディング(応答にTransfer-Encodingヘッダーがあることを意味します)を使用する場合は、 Content-Lengthヘッダーを設定しないでください。
GETメソッドは安全である必要があります。つまりユーザーが責任を負うべき副作用はありません。 たとえばほとんどの検索フォームは副作用がありません。 クライアントのリクエストが格納されたデータを変更することを意図している場合、リクエストは他のHTTPメソッドを使用する必要があります。 GETメソッドは冪等である必要があります。つまり安全に繰り返すことができます。 時にはメソッドを安全にすることも、メソッドを冪等にします。 たとえば、検索を繰り返すことは安全かつ冪等ですが、オンラインで製品を購入したりデータを修正することは安全でもなく冪等でもありません。
リクエストのフォーマットが正しくない場合、doGet
はHTTP "Bad Request"メッセージを返します。
req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトresp
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- サーブレットがGETリクエストを処理しているときにI/Oエラーが発生したServletException
- GETのためのリクエストが処理できなかったServletResponse.setContentType(java.lang.String)
protected long getLastModified(HttpServletRequest req)
HttpServletRequest
オブジェクトが最後に変更された時刻を1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数で返します。
時刻が判らない場合、このメソッドは負の数を返します。(デフォルトです)
HTTP GETリクエストをサポートし最後の変更時刻を迅速に判断できるサーブレットはこのメソッドをオーバーライドする必要があります。 これによりブラウザやプロキシのキャッシュがより効果的に機能し、サーバーやネットワークリソースの負荷が軽減されます。
訳注:HttpServletRequest
オブジェクトでなく、リクエストに応じてこのサーブレットが示すリソースが最後に変更された時刻を返すのが正しい。
req
- サーブレットに送られた HttpServletRequest
のオブジェクトHttpServletRequest
オブジェクトが最後に変更された時刻の1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数のlong
、不明な場合は-1protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
service
メソッドからHTTP HEADリクエストを受け取り、リクエストを処理します。
クライアントはContent-TypeやContent-Lengthなどのレスポンスのヘッダーに含まれる情報だけを参照したいときにHEADリクエストを送ります。
HTTP HEADメソッドはContent-Lengthヘッダを正確に設定するためにレスポンスの出力バイト数をカウントします。
このメソッドをオーバーライドすると、レスポンスボディボディの計算を回避しレスポンスヘッダーを直接設定することでパフォーマンスを向上させることができます。
書き込むdoHead
メソッドが安全かつ冪等である(つまり、一回のHTTP HEAD要求に対して複数回呼び出されないようにする)ことを確認してください。
HTTP HEADリクエストのフォーマットが正しくない場合、doHead
はHTTP "Bad Request"メッセージを返します。
req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトresp
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- I/Oエラーが発生したServletException
- HEADのためのリクエストが処理できなかったprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
このメソッドをオーバーライドするときは、リクエストデータを読み込み、レスポンスヘッダーを書き、
レスポンスのWriterまたはOutputStream オブジェクトを取得し、最後にレスポンスデータを書き込みます。
コンテンツタイプとエンコーディングを含めることをお勧めします。
PrintWriter
オブジェクトを使用してレスポンスを返す場合はPrintWriter
オブジェクトにアクセスする前にコンテンツタイプを設定します。
サーブレットコンテナはレスポンスをコミットする前にヘッダーを書き込まなければいけません。
HTTPではレスポンスボディの前にヘッダーを送信する必要があるからです。
可能であれば(ServletResponse.setContentLength(int)
メソッドを使用して)Content-Lengthヘッダーを設定し、
サーブレットコンテナが永続的な接続を使用して応答をクライアントに返すようにし、パフォーマンスを向上させます。
コンテンツの長さはレスポンス全体がレスポンスバッファ内に収まる場合には自動的に設定されます。
HTTP 1.1のチャンクエンコーディング(レスポンスにTransfer-Encodingヘッダーがあることを意味します)を使用する場合は Content-Lengthヘッダーを設定しないでください。
このメソッドは安全でも冪等でもある必要はありません。 POSTによって行われる操作にはユーザーが責任を負う可能性のある副作用があります。 例えば、保存されたデータの更新や、オンラインでの商品の購入などです。
HTTP POSTリクエストのフォーマットが正しくない場合、doPost
はHTTP "Bad Request"メッセージを返します。
req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトresp
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- サーブレットがリクエストを処理しているときにI/Oエラーが発生したServletException
- POSTのためのリクエストが処理できなかったServletOutputStream
,
ServletResponse.setContentType(java.lang.String)
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
このメソッドをオーバーライドするときは、 リクエストで送信されたコンテンツヘッダー(Content-Length、Content-Type、Content-Transfer-Encoding、 Content-Encoding、Content-Base、Content-Language、Content-Location、 Content-MD5、Content-Rangeが含まれる)を完全にそのままにしてください。 メソッドがコンテンツヘッダーを処理できない場合はエラーメッセージ(HTTP 501 - Not Implemented) を発行しリクエストを破棄する必要があります。 HTTP 1.1のより詳細な情報については、RFC 2616を参照してください。 .
このメソッドは安全でも冪等でもある必要はありません。
doPut
によって行われる操作にはユーザーが責任を負う可能性のある副作用があります。
このメソッドを使用する場合は、影響を受けるURLのコピーをテンポラリ領域に保存すると便利です。
HTTP PUTリクエストのフォーマットが正しくない場合、doPut
はHTTP "Bad Request"メッセージを返します。
req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトresp
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- サーブレットがPUTリクエストを処理しているときにI/Oエラーが発生したServletException
- PUTのためのリクエストが処理できなかったprotected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
このメソッドは安全でも冪等でもある必要はありません。 DELETEによって要求された操作にはユーザーが責任を負う可能性のある副作用があります。 このメソッドを使用する場合は、影響を受けるURLのコピーをテンポラリ領域に保存すると便利です。
HTTP DELETEリクエストのフォーマットが正しくない場合、doDelete
はHTTP "Bad Request"メッセージを返します。
req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトresp
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- サーブレットがDELETEリクエストを処理しているときにI/Oエラーが発生したServletException
- DELETEのためのリクエストが処理できなかったprotected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
doGet
メソッドをオーバーライドする場合、このメソッドは次のヘッダーを返します。
Allow: GET, HEAD, TRACE, OPTIONS
サーブレットがHTTP 1.1で実装されているものよりも新しく制定されたHTTPメソッドを実装していない限り、 このメソッドをオーバーライドする必要はありません。
訳注:HTTP/2でもHTTPのメソッドは増えていないのでこのドキュメントの内容は有効です。
req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトresp
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- サーブレットがOPTIONSリクエストを処理しているときにI/Oエラーが発生したServletException
- OPTIONSのためのリクエストが処理できなかったprotected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトresp
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- サーブレットがTRACEリクエストを処理しているときにI/Oエラーが発生したServletException
- TRACEのためのリクエストが処理できなかったprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
service
メソッドから標準のHTTPリクエストを受け取りこのクラスで定義されているdo
XXXメソッドにディスパッチします。
このメソッドはServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
メソッドのHTTPに特化したバージョンです。
このメソッドをオーバーライドする必要はありません。req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトresp
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- サーブレットがHTTPリクエストを処理しているときにI/Oエラーが発生したServletException
- HTTPリクエストが処理できなかったServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
service
メソッドにディスパッチします。このメソッドをオーバーライドする必要はありません。service
インタフェース内 Servlet
service
クラス内 GenericServlet
req
- クライアントからのリクエストを含むHttpServletRequest
オブジェクトres
- クライアントに返すレスポンスを含むHttpServletResponse
オブジェクトIOException
- サーブレットがHTTPリクエストを処理しているときにI/Oエラーが発生したServletException
- HTTPリクエストが処理できなかったか、受け取ったパラメーターがそれぞれHttpServletRequest
かHttpServletResponse
のインスタンスでなかった場合。Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
Copyright © 1999-2017, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms. Portions Copyright © 1999-2002 The Apache Software Foundation. Portions Copyright © 2017- @megascus. Translated by @megascus.