Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)
アプリケーションサーバ上で動作するアプリケーションのプログラムとして,サーブレットおよびJSPを実装するときの共通の注意事項を示します。
Webアプリケーションの動作の前提となるJ2EEアプリケーションが準拠するJ2EE仕様のバージョンについて,Webアプリケーションのバージョンごとに次の表に示します。
表6-3 J2EEアプリケーションが準拠するJ2EE仕様のバージョン
J2EEアプリケーションが準拠するJ2EE仕様のバージョン | Webアプリケーションに対応するServlet仕様 | ||||
---|---|---|---|---|---|
3.0 | 2.5 | 2.4 | 2.3 | 2.2 | |
Java EE 6 | ○ | ○ | ○ | ○ | ○ |
Java EE 5 | × | ○ | ○ | ○ | ○ |
J2EE1.4 | × | × | ○ | ○ | ○ |
J2EE1.3 | × | × | △ | ○ | ○ |
J2EE1.2 | × | × | △ | △ | ○ |
Webアプリケーションのバージョンは,web.xmlに記述するServlet仕様のバージョン情報で識別されます。上位のバージョンのWebアプリケーションは下位のバージョンの機能を使用できます。下位のバージョンのWebアプリケーションは上位のバージョンの機能を使用できません。
Webアプリケーションのバージョンごとに,使用できる機能範囲を次の表に示します。
表6-4 Webアプリケーションのサポート範囲
Webアプリケーションのバージョン | Servlet | JSP | タグライブラリ※1 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.0 | 2.5 | 2.4 | 2.3 | 2.2 | 2.2 | 2.1 | 2.0 | 1.2 | 1.1 | 2.1 | 2.0 | 1.2 | 1.1 | |
3.0 | ○ | ○ | ○ | ○ | ○ | ×※2 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
2.5 | × | ○ | ○ | ○ | ○ | × | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
2.4 | × | × | ○ | ○ | ○ | × | × | ○ | ○ | ○ | × | ○ | ○ | ○ |
2.3 | × | × | × | ○ | ○ | × | × | × | ○ | ○ | × | × | ○ | ○ |
2.2 | × | × | × | × | ○ | × | × | × | × | ○ | × | × | × | ○ |
(凡例)○:使用できる ×:使用できない
なお,下位のバージョンのWebアプリケーションから上位のバージョンの機能を使用した場合,エラーが発生することがあります。発生するエラーについてバージョンごとに次に示します。
表6-5 Servlet 2.2,2.3,2.4または2.5仕様に対応するWebアプリケーションからServlet 3.0の機能を使用した場合のエラー
仕様 | 使用する機能 | エラー時の処理 |
---|---|---|
Servlet 3.0 | 新規APIの呼び出し | Servlet 3.0仕様で追加されたAPIを使用したかどうかはチェックされません。呼び出した場合の動作は保証されないため呼び出さないよう注意してください。 |
新規アノテーションの使用 | アノテーションを使用してエラーとなった場合の処理については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「12. アノテーションの使用」を参照してください。 | |
JSP 2.2 | ELの新規API | EL2.2のAPIを使用したかどうかはチェックされません。呼び出した場合の動作は保証されないため呼び出さないよう注意してください。 |
Servlet 2.2仕様,Servlet 2.3仕様,Servlet 2.4仕様およびServlet 2.5仕様から,Servlet 3.0仕様にWebアプリケーションのバージョンアップする場合の作業,および注意事項については,「6.2.11 既存のWebアプリケーションをServlet 3.0仕様にバージョンアップする場合の留意点」を参照してください。
表6-6 Servlet 2.2,2.3,または2.4仕様に対応するWebアプリケーションからServlet 2.5の機能を使用した場合のエラー
仕様 | 使用する機能 | エラー時の処理 |
---|---|---|
Servlet 2.5 | 新規APIの呼び出し | Servlet 2.5仕様で追加されたAPIを使用したかどうかはチェックされません。呼び出した場合の動作は保証されないため呼び出さないよう注意してください。 |
新規アノテーションの使用 | アノテーションを使用してエラーとなった場合の処理については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「12. アノテーションの使用」を参照してください。 | |
JSP 2.1 | 新規ディレクティブの属性※1 | サーブレットログにKDJE39145-Eのメッセージ,メッセージログにKDJE39186-Eのメッセージがそれぞれ出力され※2,トランスレーションエラーとなります。 |
TLD 2.1 | Webアプリケーション開始時に次に示すTLDファイルが存在した場合,メッセージログにKDJE39293-Wのメッセージが出力され,処理されません。
アプリケーションへの初回アクセス時などにJSPコンパイルが発生した場合は,サーブレットログにKDJE39145-Eのメッセージ,メッセージログにKDJE39186-Eのメッセージがそれぞれ出力され※2,トランスレーションエラーとなります。 |
|
ELの追加機能 |
|
Servlet 2.2仕様,Servlet 2.3仕様およびServlet 2.4仕様から,Servlet 2.5仕様にWebアプリケーションのバージョンアップする場合の作業,および注意事項については,「6.2.12 既存のWebアプリケーションをServlet 2.5仕様にバージョンアップする場合の留意点」を参照してください。
表6-7 Servlet 2.2または2.3仕様に対応するWebアプリケーションからServlet 2.4仕様の機能を使用した場合のエラー
仕様 | 使用する機能 | エラー時の処理 |
---|---|---|
Servlet 2.4 | 新規APIの呼び出し | Servlet 2.4仕様で追加されたAPIを使用したかどうかはチェックされません。呼び出した場合の動作は保証されないため呼び出さないよう注意してください。 |
新規リスナ登録 | Webアプリケーションの開始時にKDJE39297-Wのメッセージがメッセージログに出力され,そのリスナ定義は無視されます。 | |
JSP 2.0 | 新規ディレクティブ新規スタンダードアクション※1 | サーブレットログにKDJE39145-Eのメッセージ,メッセージログにKDJE39186-Eのメッセージがそれぞれ出力され※2,トランスレーションエラーとなります。 |
タグファイル |
|
|
TLD 2.0 | 次に示すTLDファイルは,Webアプリケーション開始時にチェックされます。該当する場合,メッセージログにKDJE39293-Wのメッセージが出力され,無視されます。
|
|
シンプル・タグ・ハンドラ | サーブレットログにKDJE39145-Eのメッセージを,メッセージログにKDJE39186-Eのメッセージがそれぞれ出力され※2,トランスレーションエラーとなります。 |
Servlet 2.2仕様およびServlet 2.3仕様から,Servlet 2.4仕様にWebアプリケーションのバージョンアップする場合の作業,および注意事項については,「6.2.14 既存のWebアプリケーションをServlet 2.4仕様にバージョンアップする場合の留意点」を参照してください。
なお,Servlet 2.2仕様に対応するWebアプリケーションからServlet 2.3の機能を使用しても,アプリケーションのインポート時にServlet 2.3仕様に準拠したWebアプリケーションに書き換えられるため,正常に処理され,エラーは通知されません。
サーブレット,JSPでトランザクションを利用する場合,該当するサービスメソッドでJDBCコネクションを取得し,該当するサービスメソッドが終了する前に解放してください。トランザクションが開始しているサーブレットおよびJSPでは,次に示すJDBCコネクションの使用はサポートされません。
不正なパッケージ名が指定されたクラスをサーブレットおよびJSPで使用した場合,ブラウザからアクセスしたときにステータスコード500のエラーになります。例えば,作成したクラスファイルを正しく配置して,ブラウザからアクセスしても,パッケージ名の宣言に不正があった場合は,該当クラスが見つかりません。この場合,ステータスコード500のエラーが返されます。
フォームなどで「<」や「>」などの特別な意味を持つ文字の入力値をそのまま表示した場合,悪意のあるユーザが<SCRIPT>,<OBJECT>,<APPLET>,<EMBED>のスクリプトなどを実行できるタグを使用して,重大なセキュリティ上の問題を引き起こすおそれがあります。アプリケーション開発者は,ユーザから入力されたデータに対して必ず検査をする処理を追加して,特別な意味を持つ文字を排除する必要があります。
サーブレットまたはJSPでレスポンスがコミットされたあとは,例外などのエラーが発生したとしても,次に示すエラーページはブラウザに表示されません。
レスポンスのコミットは,ユーザがServletResponseクラスのflushBufferメソッドなどを明示的に呼び出してコミットする場合以外にも,レスポンスのバッファが満杯になって自動的にWebコンテナがコミットすることがあります。
サーブレットまたはJSPでコミットされているかどうかを調べるには,ServletResponseクラスのisCommittedメソッドを使用します。また,バッファサイズの変更は,サーブレットの場合はServletResponseクラスのsetBufferSizeメソッドで,JSPの場合はpageディレクティブのbuffer属性の指定で実施できます。
PrintWriterクラスおよびJSPWriterクラスのprintメソッドとprintlnメソッドの呼び出し回数を少なくすることで,アクセス回数を減らし,性能を向上できます。例えば,StringBufferクラスを使用し,最後にprintlnメソッドを呼び出すようにして,printおよびprintlnメソッドの呼び出し回数を削減します。
Servlet 2.3仕様で定義されているjavax.servlet.error.XXXXX属性は,web.xmlの<error-page>タグに指定されたサーブレットまたはJSP内でそのエラーページを実行する要因となったエラー情報を参照するためのものです。web.xmlの<error-page>タグに指定されたサーブレットまたはJSP以外からは,これらの属性を参照しないでください。
ファイルにアクセスする場合は,必ず絶対パスを指定してください。相対パスを指定すると,J2EEサーバはWebコンテナサーバの実行ディレクトリからの相対パスによって目的のパスを検索しようとします。ServletContextクラスのgetRealPathメソッドで相対パスを指定すると,WARファイルを展開したディレクトリでの相対パスが取得されます。
また,ファイルにアクセスする場合は,必ずファイルをクローズしてください。WARファイル展開ディレクトリでファイルにアクセスしてクローズしないと,J2EEサーバで正常にアンデプロイできなくなります。WARファイルの展開ディレクトリ下のパスを指定していない場合でもファイルをクローズしていないと,J2EEサーバの起動中にファイルを削除できないなどの現象が発生します。
JSP,サーブレットへのアクセスで例外が発生した場合,Webコンテナのデフォルトの処理では例外のステータスコードをブラウザに返します。このデフォルトの処理を変える場合はJSPのerrorPageの指定やweb.xmlでエラーページを設定してください。
J2EEアプリケーション内のコードからComponent Containerのクラスローダを取得して,次に示すメソッドを使用する場合に,java.net.JarURLConnectionクラスが使用されます。
これらのメソッドが呼び出される過程でjava.net.JarURLConnectionクラスのopenConnectionメソッドが呼び出され,該当するURLに指定されたJARファイルがオープンされます。このJARファイルはcloseメソッドを明示的に呼ばないかぎり,オープンされたままになり削除できません。これらのメソッドはJ2EEアプリケーション内で使用しないでください。また,JARファイルに対する操作が必要でjava.net.JarURLConnectionクラスのopenConnectionメソッドを使用する場合には,java.net.JarURLConnectionのgetJarFileメソッドが返すJarFileインスタンスのcloseメソッドを必ず呼び出すようにしてください。
java.net.URLConnectionクラスはsetUseCaches(boolean)メソッドを使用して,指定されたURLに対してコネクションを取得するときにキャッシュの情報を利用するかどうかを指定できます。URLConnectionクラスに対してsetUseCaches(false)メソッドを指定した場合に,コネクションごとに対象のオブジェクトが生成されます。J2EEアプリケーション内のコードから使用する場合には,J2EEサーバのJavaVMがメモリ不足となるおそれがあります。
System.loadLibraryメソッドを使用して,サーブレットおよびJSPからネイティブライブラリをロードしないでください。サーブレットおよびJSPでネイティブライブラリをロードすると,JNI仕様の制約によって,java.lang.UnsatisfiedLinkErrorが発生することがあります。ネイティブライブラリのロードが必要な場合は,System.loadLibraryメソッドを呼び出すコンテナ拡張ライブラリを作成し,サーブレットおよびJSPからコンテナ拡張ライブラリを参照するように実装してください。コンテナ拡張ライブラリの作成については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「14. コンテナ拡張ライブラリ」を参照してください。
アプリケーションを構成するサーブレットおよびJSPからスレッドを生成して,使用できます。ユーザがプログラムの中で明示して生成するスレッドのことを,ユーザスレッドといいます。
ユーザスレッドは,生成後の動作のしかた(ライフサイクル)によって,次の二つに分けられます。
表6-8 ユーザスレッドの前提条件(サーバモード)
サーバモード | 使用可否 | |
---|---|---|
J2EEサーバモード | 1.4モード | ○ |
ベーシックモード | △ | |
サーブレットエンジンモード | △ |
ユーザスレッドを使用する場合のライフサイクルについて説明します。
サービスメソッドやinitメソッドでユーザスレッドの処理を完了させるモデルです。このモデルの処理の流れを次の図に示します。
図6-1 サービスメソッドやinitメソッドの範囲内で動作させる場合の処理
サービスメソッドやinitメソッドの呼び出しの範囲内で,ユーザスレッドを生成します。サービスメソッドやinitメソッドでは,joinメソッドによってユーザスレッドの処理が完了するのを待ってから,リターンします。
サービスメソッドやinitメソッドでユーザスレッドを生成し,その後ユーザスレッドをバックグラウンドで動作させるモデルです。このモデルの処理の流れを次の図に示します。
図6-2 サービスメソッドやinitメソッドのバックグラウンドで動作させる場合の処理
ユーザスレッドを生成したサービスメソッドやinitメソッドは,ユーザスレッドを生成したあと,処理の完了を待たないでリターンします。ただし,アプリケーションを停止したあとは,ユーザスレッドからJ2EEサービスを利用できなくなります。したがって,アプリケーションの停止によってjavax.servlet.ServletContextListenerのcontextDestroyedメソッドか,JSPまたはServletのdestroyメソッドでユーザスレッドを停止すれば問題ありません。
Webコンテナではセッション情報の永続化はサポートされません。Webコンテナではセッション情報は,正常,異常に関係なくWebコンテナが終了すると失われます。セッション情報を保持したい場合は,セッションフェイルオーバ機能を使用してください。
また,web.xmlで<distributable>タグを指定した場合,およびSerializableでないオブジェクトをセッション情報として登録した場合もIllegalArgumentExceptionは発生しません。
initメソッドおよびdestroyメソッドをオーバーライドしていないサーブレットを初期化または終了すると,次の形式のログがサーブレットログに出力されます。
また,JSPの場合は,pageディレクティブのextends属性で指定するJSPの基底クラスでinitメソッドおよびdestroyメソッドをオーバーライドしなかった場合,同様のメッセージが出力されます。その場合,サーブレット名は"com.hitachi.software.web.servlet-name.jsp"となります。JSPでpageディレクティブのextends属性を指定しなかった場合は,initメソッドのログだけが出力され,destroyメソッドのログは出力されません。
ただし,サーブレットの場合もJSPの場合も,initメソッドおよびdestroyメソッドをオーバーライドしてスーパークラスのinitメソッドおよびdestroyメソッドを呼ぶときは,このメッセージを出力します。
javax.servlet.ServletRequestオブジェクトのjavax.servlet.error.exception属性について,Servletで例外をスローした場合とJSPファイルで例外をスローした場合の二つに分けて説明します。
バイナリデータを含むWebアプリケーションでは,次のことに注意してください。
JSPまたはサーブレットのレスポンスボディの文字エンコーディングが,UTF-16(16ビットUCS変換形式)の場合,ブラウザによって正しく表示できない場合があります。その場合は,JSPまたはサーブレットの文字エンコーディングに,UTF-16BE(16ビットUCS変換形式のビッグエンディアンバイト順),またはUTF-16LE(16ビットUCS変換形式のリトルエンディアンバイト順)を使用してください。
getServerNameメソッド,およびgetServerPortメソッドの戻り値について説明します。
Servlet 2.4仕様以降では,Hostヘッダの有無によって,getServerNameメソッド,およびgetServerPortメソッドの戻り値が異なります。Servlet 2.4仕様以降でのgetServerNameメソッド,およびgetServerPortメソッドの戻り値を次の表に示します。
表6-9 getServerNameメソッド,およびgetServerPortメソッドの戻り値(Servlet 2.4仕様以降の場合)
Hostヘッダの有無 | getServerNameメソッドの戻り値 | getServerPortメソッドの戻り値 |
---|---|---|
あり | Hostヘッダの「:」より前の部分 | Hostヘッダの「:」よりあとの部分 |
なし | 解決されたサーバ名またはIPアドレス | クライアントとの接続を受け付けたサーバのポート番号 |
アプリケーションサーバでは,getServerNameメソッド,およびgetServerPortメソッドの戻り値は,HTTPリクエストと,使用する機能の組み合わせによって得られます。なお,HTTP 1.1のリクエストにHostヘッダが含まれない場合,HTTP 1.1仕様に従って,400エラーとなります。また,HTTP 1.1仕様では,リクエストラインのリクエストURIが絶対URIの場合,ホストにはリクエストURIのホストを使用して,Hostヘッダの内容は無視するように定義されています。なお,Servlet仕様では明記されていませんが,HTTP仕様に従って,リクエストラインのURIに含まれるホスト名を優先するようになっています。
HTTPリクエストと,使用する機能の組み合わせによって得られる,getServerNameメソッド,およびgetServerPortメソッドの戻り値を次の表に示します。なお,ゲートウェイ指定機能を使用している場合の,getServerNameメソッド,およびgetServerPortメソッドの戻り値については,表6-9を参照してください。
表6-10 getServerNameメソッド,およびgetServerPortメソッドの戻り値(アプリケーションサーバの場合)
HTTPリクエスト | 使用する機能 | getServerNameメソッドの戻り値 | getServerPortメソッドの戻り値 | |
---|---|---|---|---|
Hostヘッダの有無 | リクエストラインのURIの種類 | |||
あり | 絶対URI | Webサーバ連携 | リクエストラインのホスト名 | リクエストラインのポート番号 |
インプロセスHTTPサーバ | リクエストラインのホスト名 | リクエストラインのポート番号 | ||
相対URI | Webサーバ連携 | Hostヘッダのホスト名 | Hostヘッダのポート番号 | |
インプロセスHTTPサーバ | Hostヘッダのホスト名 | Hostヘッダのポート番号 | ||
なし | 絶対URI | Webサーバ連携 | リクエストラインのホスト名 | リクエストラインのポート番号 |
インプロセスHTTPサーバ | リクエストラインのホスト名 | リクエストラインのポート番号 | ||
相対URI | Webサーバ連携 | Webサーバのホスト名またはIPアドレス※2 | Webサーバのポート番号 | |
インプロセスHTTPサーバ | J2EEサーバのホスト名またはIPアドレス※1 | インプロセスHTTPサーバのポート番号 |
注※1 java.net.InetAddress.getLocalHostメソッド,またはgetHostNameメソッドの戻り値となります。
注※2 HTTP Serverを使用する場合,ServerNameディレクティブに指定した値となります。ServerNameディレクティブについては,マニュアル「HTTP Server」を参照してください。
ゲートウェイ指定機能使用時のgetServerNameメソッド,およびgetServerPortメソッドの戻り値を次の表に示します。
表6-11 ゲートウェイ指定機能使用時のgetServerNameメソッド,およびgetServerPortメソッドの戻り値(アプリケーションサーバの場合)
HTTPリクエスト | 使用する機能 | getServerNameメソッドの戻り値 | getServerPortメソッドの戻り値 | |
---|---|---|---|---|
Hostヘッダの有無 | リクエストラインのURIの種類 | |||
あり | 絶対URI | Webサーバ連携 | リクエストラインのホスト名 | リクエストラインのポート番号 |
インプロセスHTTPサーバ | リクエストラインのホスト名 | リクエストラインのポート番号 | ||
相対URI | Webサーバ連携 | Hostヘッダのホスト名 | Hostヘッダのポート番号 | |
インプロセスHTTPサーバ | Hostヘッダのホスト名 | Hostヘッダのポート番号 | ||
なし | 絶対URI | Webサーバ連携 | ゲートウェイ指定機能で指定したホスト名 | ゲートウェイ指定機能で指定したポート番号 |
インプロセスHTTPサーバ | リクエストラインのホスト名 | リクエストラインのポート番号 | ||
相対URI | Webサーバ連携 | ゲートウェイ指定機能で指定したホスト名 | ゲートウェイ指定機能で指定したポート番号 | |
インプロセスHTTPサーバ | ゲートウェイ指定機能で指定したホスト名 | ゲートウェイ指定機能で指定したポート番号 |
アプリケーションサーバでは,コンストラクタServletException(String, Throwable)またはServletException(Throwable)で指定した根本原因の例外をgetCauseメソッドで取得できます。なお,getRootCauseメソッドでも取得できます。ただし,07-60以前のバージョンではgetCauseメソッドにはnullを返します。
javax.servlet.ServletExceptionクラスのコンストラクタで指定した根本原因の例外の取得について,互換用のパラメタおよび注意事項について説明します。
表6-12 webserver.servlet_api.exception.getCause.backcompatの指定値によるgetCauseメソッドおよびgetRootCauseメソッドの戻り値の違い
メソッド | webserver.servlet_api.exception.getCause.backcompatの指定値 | |
---|---|---|
true | false | |
getCause() | × | ○ |
getRootCause() | ○ | ○ |
(凡例)○:根本原因の例外を返す ×: nullを返す
アプリケーションサーバでは,javax.servlet.ServletResponseオブジェクトから取得するjavax.servlet.ServletOutputStreamオブジェクトに対して,closeメソッドを実行したあとでflushメソッドを実行しても,java.io.IOException例外をスローしません。
アプリケーションサーバでは,リクエストURIに含まれる文字列は,正規化されたあと,次に示すマッチング処理で使用されます。
javax.servlet.http.HttpServletRequestインタフェースのgetRequestURIメソッドおよびgetRequestURLメソッドでは,正規化されたURLが戻り値となります。
リクエストURLがURLマッピングされたServletまたはJSPと一致しないで,welcomeファイルに転送される必要がある場合,Webコンテナでは次のように転送先のwelcomeファイルが選択されます。
まず,指定されたwelcomeファイル名から静的コンテンツやJSPファイルの候補が優先して選択されます。該当するものがない場合,URLマッピングされたServletまたはJSPの候補が選択されます。
welcomeファイルに関する注意事項について説明します。
welcomeファイルの転送は,HTTPリダイレクト(HTTPステータスコード302でブラウザがリダイレクトする)によって実現しています。この転送方式には制約があるため,URL設計の際に次のことに注意してください。
JSP事前コンパイル済みのWebアプリケーションに,welcomeファイルに指定したJSPファイルを追加する場合,JSPファイルの追加後にJSP事前コンパイルを再度実行する必要があります。JSP事前コンパイルを再度実行しなかった場合,正しくwelcomeファイル転送処理が実行されません。
サーブレットクラスが参照できないサーブレットをwelcomeファイルに指定しないでください。サーブレットクラスが参照できないサーブレットを指定した場合,正しくwelcomeファイル転送処理が実行されません。
Webアプリケーション内のリソースとして存在しないディレクトリのパスに対するリクエストの場合,リクエストURLの末尾が「/」であってもwelcomeファイル転送処理は実行されません。
Webアプリケーションを開始すると,リクエストの受付を開始する前に次の順序で初期化処理をすることがServlet 2.4仕様で明確化されました。アプリケーションサーバでは,Servlet2.3以前のWebアプリケーションでも同じ順序で初期化処理をします。Webアプリケーション開始時のサーブレット,フィルタ,およびリスナは次の順序で開始されます。
注※1 Servlet 3.0以降では,API呼び出しによって動的にサーブレット,フィルタ,リスナを追加できますが,インスタンスを指定するAPI呼び出しによって定義を追加したサーブレット,フィルタ,リスナについては,インスタンス生成済みのため,Webコンテナではインスタンスを生成しません。
注※2 リスナのcontextInitialized()メソッドの呼び出しで例外が発生しても,KDJE39103-Eのメッセージを出力してWebアプリケーションの開始処理を継続します。
なお,web.xmlの<load-on-startup>要素によってWebアプリケーション開始時の初期化処理実行を指定しなかったサーブレットについては,初回リクエスト実行時にサーブレットのインスタンスの生成およびinit()メソッドを呼び出します。
このとき,サーブレットのインスタンスの生成およびinit()メソッドはフィルタより前に呼び出します。
Webアプリケーション終了時のサーブレット,フィルタ,およびリスナは次の順序で終了します。
Webアプリケーション内の静的コンテンツへのアクセス時に使用できるメソッドは,GET,HEAD,POST,TRACE,OPTIONSのどれかです。
POSTメソッドを使用した場合,GETメソッド使用時と同様,静的コンテンツの内容を応答します。
同じWebアプリケーション内では,web.xmlで指定したエラーページと,HTTPレスポンスに文字エンコーディングを使用するサーブレットおよびJSPに,同じ文字エンコーディングを使用してください。
リクエストのクエリ文字列にイコール("=")以降しか指定していない場合(例えば,http://localhost/application/getparam.jsp?=paramのような場合),使用しているWebサーバ種別によって,javax.servlet.ServletRequestインタフェースのリクエストパラメタを取得するServlet APIの戻り値が異なります。
Webサーバ種別ごとのServlet APIの戻り値を次に示します。
以下のレスポンスヘッダはWebコンテナにより自動的にレスポンスにセットされる場合があります。このようなレスポンスヘッダは,javax.servlet.http.HttpServletResponseインタフェースのcontainsHeaderメソッドで,レスポンスにセットされているかどうかを確認できません。
アプリケーションサーバのライブラリをJ2EEアプリケーションに含めると,ライブラリのバージョン不整合などが原因で,アプリケーションのインポートや開始,実行で不正な動作になることがあります。そのため,製品が使用方法として明示している場合を除いて,アプリケーションサーバのライブラリはJ2EEアプリケーションに含めないようにしてください。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.