以下について説明します。
セション使用時の注意
セションIDの一意性の範囲、桁数は、Webコンテナの実装により異なります。
そのため、セションIDをWebコンテナ以外のサービスで使用しないでください。
例えば、セションIDをデータベースに登録した場合は、本製品のバージョンアップによってカラム数不足が発生する可能性があります。
クッキーによるセション管理は、Webコンテナにより自動で行われます。
アプリケーションでセション管理用クッキーの追加などの操作は、行わないでください。
セション継続やセキュリティ上の問題が発生する場合があります。
WebサーバがSSL環境で動作している場合には、セション管理用クッキーに自動的にSecure属性を付加します。
SSLアクセラレータを使用しておりWebサーバが非SSL(HTTP)で動作している場合には、Secure属性は自動的に付加しません。Secure属性を付加する方法については、Interstage Java EE管理コンソールのIJServerクラスタのヘルプを参照してください。
文字コードについて
Webブラウザは、以下の優先順番で文字コードを識別します。
ContentTypeヘッダのcharsetに指定した文字コード
HTMLの場合は<meta>タグに指定した文字コード
指定した文字コードは、通常Webブラウザがコンテンツを表示する際の文字コード、また、Webブラウザがサーバにリクエストを送信する際の文字コードとして使用されます。
Servlet/JSPではContentTypeヘッダの設定、HTMLファイルには<meta>タグの設定を行ってください。
詳細は、HTML/Servlet/JSPの仕様を参照してください。
Webブラウザからのリクエストを正しい文字コードで処理するための方法には、以下の2つがあります。
以下のServlet APIを使用して、文字コードを指定します。
javax.servlet.ServletRequest.setCharacterEncoding
詳細は、Servletの仕様を参照してください。
例
request.setCharacterEncoding("SJIS");
注意
このメソッドは、リクエストのパラメタを読み込む前、またはgetReaderメソッドを呼び出す前に実行されなければなりません。
sun-web.xmlの<parameter-encoding>タグで文字コードを指定します。
定義方法の詳細は、「4.2.3.2 Interstage Web application deployment descriptor (sun-web.xml)」を参照してください。
例
<parameter-encoding default-charset="SJIS"/>
注意
javax.servlet.ServletRequest.setCharacterEncodingが指定されている場合は、setCharacterEncodingで指定された値が優先されます。
JSPでは、以下の文字コードを正しく設定する必要があります。
JSPファイルの文字コード
ブラウザに返す文字コード
詳細は、JSPの仕様を参照してください。
Webコンテナ以外のサービスをWebアプリケーションで使用する場合、必要に応じて入出力データのコードを変換してください。
詳細は、使用するサービスのマニュアルを参照してください。
「14.2.2 Java EEアプリケーションで文字化けが発生する場合の対処」を参照してください。
Cookieについて
一部のWebブラウザでは、ポート番号に80(SSL通信の場合はポート番号443)を指定した場合と省略した場合とが別サーバであると判断され、Cookieヘッダが送信されない場合があります。
そのため、アプリケーションでCookieによる制御を行う場合は、Webブラウザからの呼出し方がどちらかに統一されるようにHTML、アプリケーションを構築することをお勧めします。
Cross-site-Scriptingの脆弱性の問題
「使用上の注意」の「Interstage共通の注意事項」の「Cross-Site Scripting問題について」を参照してください。
ErrorやExceptionについて
アプリケーションで発生したErrorやExceptionをWebブラウザに返却するアプリケーションは、内部の情報の漏洩につながるため、作成しないことを推奨します。
また、サーブレットやJSPで処理していない(catchしていない)ErrorやExceptionに対して、Webアプリケーション環境定義ファイルまたはJSP内でエラーページを指定していない場合、Webコンテナのもつエラーページが表示されますが、この場合、ExceptionやErrorのスタックトレースは出力されません。
エラーページについて
web.xmlに指定したエラーページ、またはデフォルトエラーページが表示された場合のステータスコードは通常、エラーページを表示する原因となったステータスコードが返されます(表示する原因が例外の場合、ステータスコードは500です)。
任意のステータスコード(例えば、200)を返したい場合、エラーページまたはFilterを使用してステータスコードを変更してください。
Webブラウザの種類や設定によっては意図したエラーページが表示されず、Webブラウザで用意されたエラーページが表示されることがあります。
例
Microsoft(R) Internet Explorer 5.x, 6.0
「ツール」→「インターネット オプション」→「詳細設定」→「HTTP エラー メッセージを簡易表示する」が有効(デフォルト値)の場合。
JSPの入れ替えについて
開発環境で作成したコンパイル結果を本番環境にコピーすると、本番機でのJSPのコンパイルを抑止できますが、JSPのコンパイル結果のタイムスタンプがJSPファイルまたはJSPファイルから静的includeされるファイルのタイムスタンプよりも過去の場合は、JSPのコンパイルが動作してしまいます。
そのため、JSPファイルおよびJSPのコンパイル結果のタイムスタンプは、開発環境と本番環境であわせておくことを推奨します。
JSPは、JSPまたはJSPから静的includeされているファイルのタイムスタンプがJSPのコンパイル結果のタイムスタンプよりも新しい場合にコンパイルされます。
したがって、JSPまたはJSPから静的includeされているファイルを修正前の状態に戻す場合は、タイムスタンプを修正前のタイムスタンプではなくマシンの現在の時刻に更新してください。
Webアプリケーションの相互呼出しについて
「コンテキストの共有」機能を使用して他のWebアプリケーションにディスパッチし、かつセションを使用するアプリケーションでは、以下に注意してください。
ディスパッチ先でセションを生成すると、ディスパッチ元でセションが存在しない場合は、ディスパッチ元でセションが自動的に生成されます。
ディスパッチ元でセションを破棄しても、ディスパッチ先のセションは自動的に破棄されません。
必ず、ディスパッチ先のセションを破棄してから、ディスパッチ元のセションを破棄してください。
ディスパッチ元でセションを破棄した場合、ディスパッチ先で生成済みセションがあっても、ディスパッチ元経由でのアクセスではセションを参照できません。
リクエストURLにディレクトリを指定した場合
リクエストURLにディレクトリを指定した場合、かつ、ファイルの一覧が表示されるように設定している場合、コンテキストルート直下に「.com_sun_appserv_timestamp」というファイル名のファイルが表示されることがあります。
このファイルは、IJServerクラスタが制御用に使用するファイルです。削除しないでください。
また、このファイルは、Webブラウザからアクセスできないように制限されています。アクセスした場合は、HTTPエラーステータスコード 404(Not Found)が返されます。
ServletContext/ServletRequestの属性について
以下のプレフィックスで始まる属性は、予約されています。
値は、変更しないでください。
java.
javax.
sun.
com.sun.
com.fujitsu.interstage.javaee.
また、ServletContextAttributeListener/ServletRequestAttributeListenerが設定されている場合、Webコンテナが上記プレフィックスで始まる属性を追加、更新、削除するタイミングでリスナーのメソッドが呼び出されます。
レスポンスヘッダに付加されるServerヘッダについて
Webコンテナは、デフォルトで以下のServerヘッダをレスポンスヘッダに付加します。
Server : Interstage Application Server |
連携しているWebサーバの設定によっては、Webコンテナでレスポンスヘッダに付加しているServerヘッダが、クライアントに返る場合があります。そのため、別の情報を返したい場合は、以下のJava VMオプションで指定してください。
-Dproduct.name=任意の文字列 |
Java VMオプションの設定については、asadminコマンドの「11.1.16.4 create-jvm-optionsサブコマンド」を参照してください。
アプリケーションの配備解除について
サーバーインスタンス配下に作成されるJSPのコンパイル結果は、アプリケーションを配備解除した場合でも削除されません。
以下の操作を行ったタイミングで削除されます。
アプリケーションの再配備
サーバーインスタンスの再起動
サーバーインスタンスの削除