ページの先頭行へ戻る
Interstage Application Server V12.0.0 Java EE 7 設計・構築・運用ガイド
FUJITSU Software

13.2.8 Webアプリケーションについて

HTTPレスポンスに設定するヘッダ数の制限

J2EEではHTTPレスポンスに設定するヘッダ数に制限がありませんが、Java EE 7では100個までに制限されるようになりました。なお、上限値はネットワーク設定の定義項目の「レスポンスヘッダ数の上限値」で変更可能です。

HTTPリクエストパラメータ数/ヘッダ数の制限

J2EEではHTTPリクエストパラメータ数は特に制限されませんでしたが、Java EE 7では10000個に制限されるようになりました。なお、上限値はネットワーク設定の定義項目の「HTTPリクエストパラメータ数の最大値」で変更可能です。

また、J2EEではHTTPリクエストヘッダ数は特に制限されませんでしたが、Java EE 7では100個に制限されるようになりました。なお、上限値はネットワーク設定の定義項目の「リクエストヘッダ数の上限値」で変更可能です。

キープアライブのタイムアウト値

Java EE 7のキープアライブのタイムアウトを設定する以下の定義項目は、キープアライブ以外のタイムアウト値としても使用されます。詳細は「HTTP接続のタイムアウト」を参照してください。

${clusterName_instanceName_configName}.network-config.protocols.protocol.${protocol-name}.http.timeout-seconds

本定義項目は以下の3つのタイムアウトとして設定されます。

キープアライブを無効にするときは、キープアライブのタイムアウト値を変更する必要はなく、初期値のままで問題ありません。

JSPファイルを読み込むエンコーディング

J2EEではJSP1.2に従い、JSPファイルを読み込むエンコーディングは、コンパイル単位でした。include先のJSPファイルも、include元とおなじエンコーディングで読み込まれます。

Java EE 7ではJSP2.3に従い、JSPファイルを読み込むエンコーディングは、ファイル単位となります。include先のJSPファイルを読み込むエンコーディングは、include元のJSPファイルを読み込むエンコーディングの影響を受けません。(デフォルトISO-8859-1)

初回リクエスト時のJSPコンパイル

J2EE機能の場合は、Webアプリケーション配備後の初回リクエスト時にJSPのコンパイルが行われるだけで、JSPファイルの更新およびコンパイル結果の更新、削除を行わない限りは再度JSPのコンパイルが行われることはありませんでした。
Java EE 7機能の場合は、IJServerクラスタを起動した後の初回リクエスト時に毎回JSPのコンパイルを実施します。

JSPのコンパイルが行われることによる運用環境での一時的な負荷を減らす場合には、JSP事前コンパイル機能を利用して、事前にコンパイル結果を生成した状態で運用を行ってください。詳細は、「2.6.8 JSP事前コンパイル」を参照してください。

JSP前コンパイル

J2EE機能では、配備後にJSP事前コンパイルを行うことができました。

Java EE 7機能では、配備前、または配備時にのみJSP事前コンパイルを行うことができます。
配備後にJSPの入替えを行う場合には、以下のいずれかの運用を行ってください。

JREによるJSPの運用

J2EE機能の場合は、Java Runtime Environment(以降、JREとする)でJSPを含むWebアプリケーションを実行できました。
Java EE 7機能の場合は、JREを使用できません。

要求受け付けるWebサーバのIPアドレス

Java EE 7機能の環境設定画面は、システムの環境設定「Webサーバとワークユニットを同一のマシンで運用する」の設定の影響を受けません。
Webコンテナが要求を受け付けるWebサーバを制限する必要がある場合には、運用環境に合わせて要求を受け付けるWebサーバのIPアドレスを設定する必要があります。なお、デフォルトの動作は要求を受け付けるサーバのIPアドレスが指定されていない状態となります。この場合、WebコンテナはすべてのWebサーバからのリクエストを受け付けます。

以下に、運用環境に合わせた要求を受け付けるWebサーバのIPアドレスを指定する方法を説明します。

Webサーバを同一マシンで運用している場合(ループバックアドレスを指定)

127\.0\.0\.0\.1

Webサーバを同一マシンで運用していない場合

192\.168\.10\.5

Webブラウザでセションを保存する

J2EE機能で「Webブラウザでセションを保存する」を有効にする場合、サーバ上にあるセッションのセッションタイムアウト時間と、Webブラウザ上で保持するセッションの追跡に使用するcookieの有効時間は連動していました。そのため、サーバ上のセッションがセッションタイムアウトした時点で、Webブラウザが保持するセッションの追跡に使用するcookieは無効となり、Webブラウザからの次のリクエストは最も負荷の少ないWebコンテナ(IJServerプロセス)で処理されました。
Java EE 7機能では、Webブラウザでセッションを保存する場合、セッションの追跡に使用するcookieの有効時間を以下のいずれかで設定します。詳細は「cookie-properties (親タグ:session-config)」を参照してください。

そのため、サーバ上にあるセッションのセッションタイムアウト時間と、Webブラウザ上で保持するセッションの追跡に使用するcookieの有効時間は連動しません。セッションタイムアウトとは異なる値を設定すると、サーバ上のセッションがセッションタイムアウトしていても、Webブラウザはセッションを継続するようリクエストし、常に同じWebコンテナ(IJServerプロセス)で処理されます。

本機能を使用する場合には、以下の点に注意してください。

ョンの追跡に使用するcookieの破棄

J2EE機能では、以下の場合にWebブラウザにセションの追跡に使用するcookieの破棄を促すヘッダをレスポンスに付加していました。

これにより、セションを破棄(ログアウトなど)またはセションタイムアウトした後のリクエストは以前と同じWebコンテナ(IJServerプロセス)ではなく、リクエスト時点で負荷(リクエスト処理多重度)のもっとも小さいWebコンテナで処理されました。
Java EE 7機能では、セションの破棄cookieはレスポンスに付加されません。

そのため、セションを破棄した後に同じWebブラウザから(Webブラウザの再起動なしに)リクエストした場合、以前と同じWebコンテナでリクエストが処理されます。
Webブラウザで保持しているセッションの追跡に使用するcookieを削除するためには、Webブラウザを再起動してください。

ただし、「Webブラウザでセションを保存する」を有効にしている場合、Webブラウザの再起動では削除されません。Webブラウザの設定に従って、手動でセッションの追跡に使用するcookieを削除してください。

マッングがなくてもサーブレットが動作する

Java EE 7機能では、本機能は使用できません。
J2EE機能で本機能を使用していた場合、deployment descriptor(web.xml)にマッピングを記述してください。
「/servlet/サーブレットクラス名」または「/servlet/サーブレット名」にマッピングすることによって、Webアプリケーションのプログラム修正を行わずに移行することが可能です。以下に、修正方法を説明します。

サーブレットクラス名で運用していた場合のdeployment descriptor(web.xml)

  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.fujitsu.interstage.NonMappingServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/servlet/com.fujitsu.interstage.NonMappingServlet</url-pattern>
  </servlet-mapping>

サーブレット名で運用していた場合deployment descriptor(web.xml)

  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.fujitsu.interstage.NonMappingServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/servlet/TestServlet</url-pattern>
  </servlet-mapping>

注意

以下の理由によりセキュリティ上の問題があるため、本製品では「マッピングがなくてもサーブレットが動作する」の使用を推奨していません。

  • deployment descriptor(web.xml)の定義がなくてもすべてのサーブレットが呼出し可能となってしまう。

  • Webアプリケーション内で使用しているクラスなど、内部構造が外部に漏れてしまう。

サーブレットはdeployment descriptor(web.xml)にマッピングを記述して呼び出してください。

Interstage HTTP ServerがBASIC認証した情報の取得について

J2EE機能では、デフォルトではInterstage HTTP ServerがBASIC認証した情報を使用できません。
Interstage管理コンソールの[システム] > [ワークユニット] > [IJServer] > [配備] > [詳細設定]画面で、設定できます。

Java EE 7機能では、デフォルトでInterstage HTTP Server 2.2がBASIC認証した情報を使用できます。ただし、上記のような設定項目はなく、使用不可にはできません。そのため、Interstage HTTP Server 2.2がBASIC認証した情報を取得できないようにしたい場合はInterstage HTTP Server 2.2を使用するのをやめて、Java EE 7側でBASIC認証してください。

レスポンスヘッダに指定する文字コード

Java EE 7では、印字可能なASCIIコード範囲外の文字をHTTPレスポンスヘッダに設定すると、半角空白に置き換えられてクライアントに返却されるようになりました。

そのため、HTTPレスポンスヘッダにContent-Dispositionヘッダを設定することによりファイルのダウンロードが行われる場合は、レスポンスヘッダのURLエンコードが必要です。詳細は、「レスポンスヘッダに指定する文字コード」「日本語などのASCIIではないファイル名のファイルをダウンロードする場合」を参照してください。

ネットワークの共有資源へアクセスする場合

ネットワークの共有資源へアクセスする場合、再度設定が必要になります。詳細は「3.1.12 ネットワークの共有資源へアクセスする場合の環境設定」を参照してください。

13.2.8.1 Webアプリケーションの非互換について

J2EE機能のTomcat4.1ベースのServletサービス、Tomcat5.5ベースのServletサービスと、Java EE 7機能のWebコンテナのアプリケーション動作の非互換項目を以下に示します。該当する機能をWebアプリケーションで使用している場合には、Webアプリケーションを修正してください。
Servlet/JSP仕様の差分については、Java(TM) Servlet SpecificationおよびJavaServer Pages(TM) Specificationをあわせて参照してください。
またシステム移行の際には、運用前に業務の観点で十分な動作検証を実施してください。

Tomcat 3.1ベースのServletサービスとの動作については、「J2EE ユーザーズガイド(旧版互換)」の「旧機能から新機能への移行方法」-「Servletサービス(Tomcat5.5ベースのサーブレット実行環境)への移行」-「アプリケーションの非互換一覧」を参照してください。

No.

機能

J2EE機能

Java EE 7機能のWebコンテナ

Tomcat4.1ベースのServletサービス

Tomcat5.5ベースのServletサービス

1

カスタムタグのTag#release()メソッド

カスタムタグの開発で実装するjavax.servlet.jsp.tagext.Tagインタフェースのpublic void release()メソッドは、Webアプリケーション終了時に呼び出されます。
V5.1以前(Tomcat 3.1ベースのServletサービス)と同じタイミングで処理を行う場合には、カスタムタグを以下のように修正してdoFinally()メソッドに処理を記述してください。
javax.servlet.jsp.tagext.TryCatchFinallyインタフェースをimplementsして、以下のメソッドを実装します。

public void doCatch(Throwable t)
public void doFinally()

2

Webブラウザに返却されるステータスコード

Webアプリケーション環境定義ファイルに<error-page>タグが設定されている場合にも、発生した現象のステータスコードがそのまま返却されます。
また、JSPのerrorPage属性に指定したJSPエラーページでisErrorPage属性に"true"が設定されている場合には、ステータスコードは200です。

Webアプリケーション環境定義ファイルに<error-page>タグが設定されている場合にも、発生した現象のステータスコードがそのまま返却されます。
また、JSPのerrorPage属性に指定したJSPエラーページでisErrorPage属性に"true"が設定されている場合には、ステータスコードは500です。

3

JSPの呼出し(更新の反映契機)

JSPまたはJSPから静的includeしているファイルを更新した場合、前回コンパイルされた日時よりも新しい日付のJSPファイルの場合に反映されます。
「使用上の注意」の「Servletサービスの注意事項」も参照してください。

大文字・小文字は区別されます。

JSPまたはJSPから静的includeしているファイルを更新した場合、前回コンパイルされた日時よりも新しい日付のJSPファイルの場合に反映されます。「JSPの入れ替えについて」も参照してください。

大文字・小文字は区別されます。

4

Webアプリケーション環境定義ファイルの<servlet>タグ内の<load-on-startup>タグ

0を指定した場合は最後にロードされます。
負の数を指定した場合はWebアプリケーション起動(活性化)時にロードされません。

0を指定した場合は最初にロードされます。
負の数を指定した場合はWebアプリケーション起動(活性化)時にロードされません。

-2147483648~2147483647以外の値を指定した場合もWebアプリケーションの起動は成功します。

-2147483648~2147483647以外の値を指定した場合は配備エラーになります。

5

Webブラウザにスタックトレースを表示

内部の情報が漏洩する可能性があるため、リクエストの処理でErrorやExceptionが発生した場合、Webブラウザにスタックトレースを表示しません。

Tomcat 3.1ベースのServletサービスでの動作については、「J2EE ユーザーズガイド(旧版互換)」の「旧機能から新機能への移行方法」-「Servletサービス(Tomcat5.5ベースのサーブレット実行環境)への移行」-「アプリケーションの非互換一覧」を参照してください。

6

Webアプリケーション環境定義ファイルの<servlet-mapping>タグ内の<servlet-name>タグ

指定していない名前を記述した場合は、Webアプリケーションの起動に失敗します。

指定していない名前を記述した場合は、Webアプリケーションの配備に失敗します。

7

Webアプリケーション環境定義ファイルの<welcome-file-list>タグ内の<welcome-file>タグ

welcome fileを省略した場合、デフォルト設定が使用されます。デフォルト設定のファイルは以下の順番で有効になります。

1. index.html
2. index.htm
3. index.jsp

welcome file(省略時はデフォルト設定)に該当するファイルがない場合は、Interstage管理コンソールの[ワークユニット] > 「ワークユニット名」 > [環境設定]タブ > [詳細設定] > [Servletコンテナ設定] > [ファイルの一覧表示]に設定されている値によって、ステータスコード404(ファイルが存在しない)、またはその実体となるディレクトリ配下のディレクトリやファイルの一覧が表示されます。

welcome fileを省略した場合、デフォルト設定が使用されます。デフォルト設定のファイルは以下の順番で有効になります。

1. index.html
2. index.htm
3. index.jsp

welcome file(省略時はデフォルト設定)に該当するファイルがない場合は、ステータスコード404(ファイルが存在しない)が表示されます。

8

Webアプリケーション環境定義ファイルの<env-entry>タグ内の<env-entry-value>タグ

<env-entry-value>タグを省略した場合には、デフォルト値が設定されます。 (注1)

Tomcat 3.1ベースのServletサービスでの動作については、「J2EE ユーザーズガイド(旧版互換)」の「旧機能から新機能への移行方法」-「Servletサービス(Tomcat5.5ベースのサーブレット実行環境)への移行」-「アプリケーションの非互換一覧」を参照してください。

<env-entry-value>タグを省略して環境エントリをlookupした場合にはjavax.naming.NamingExceptionまたはそのサブクラスが投げられます。

9

Webアプリケーション環境定義ファイルの<taglib-location>タグで存在しないパスを指定した場合

Webアプリケーションの起動に失敗します。

無効となります。

10

WEB-INF配下にXMLの文法に誤りのあるTagLibraryDescriptorファイルが存在した場合

メッセージ「IJServer15111」がコンテナログに出力され、Webアプリケーションの起動に失敗します。

メッセージは出力されますが、Webアプリケーションの起動は成功します。

Webアプリケーションの配備に失敗、またはWebアプリケーションの起動に失敗します。

11

Webアプリケーション環境定義ファイルの<servlet-mapping>タグ内の<url-pattern>タグ

特定の拡張子をもつURLを指定した場合(例:*.jsp)は、URL内の「/」と「/」で囲まれた箇所もマッピング対象とならず、最後の「/」以降がマッピング対象となります。

Tomcat 3.1ベースのServletサービスでの動作については、「J2EE ユーザーズガイド(旧版互換)」の「旧機能から新機能への移行方法」-「Servletサービス(Tomcat5.5ベースのサーブレット実行環境)への移行」-「アプリケーションの非互換一覧」を参照してください。

12

Webアプリケーション環境定義ファイルの<welcome-file-list>タグ内の<welcome-file>タグに指定されたファイルを表示する場合の動作

  • URLが「/」で終わっていない場合、URLの最後に「/」を追加した値をLocationヘッダに指定し、ステータスコード:302を返します。

URLが「/」で終わっていない場合、URLの最後に「/」を追加した値をLocationヘッダに指定し、ステータスコード:301を返します。

URLが「/」で終わっている場合、<welcome-file>タグに指定されたファイル名を追加したURLをLocationヘッダに指定し、ステータスコード:302を返します。そのため、指定したコンテンツ先で取得できるリクエストのURLなどのパス情報は、ブラウザが再度リクエストを発行(リダイレクト)した時の情報となります。

URLが「/」で終わっている場合、<welcome-file>タグに指定されたコンテンツを直接処理して返します。そのため、指定したコンテンツ先で取得できるリクエストのURLなどのパス情報は、ブラウザからリクエストされてきたパスのままとなり、<welcome-file>タグで指定したコンテンツを含むパスとはなりません。
(注3)

URLが「/」で終わっている場合、<welcome-file>タグに指定されたコンテンツを直接処理して返します。そのため、指定したコンテンツ先で取得できるリクエストのURLなどのパス情報は、ブラウザからリクエストされてきたパスのままとなり、<welcome-file>タグで指定したコンテンツを含むパスとはなりません。
(注3)

13

複数のAccept-Languageヘッダを持つリクエストを受け付けた場合のHttpServletRequest#getHeaders()メソッドの動作 (注2)

「,」で区切られた値を1つの要素としてEnumerationが返されます。
例)
ja, es

Tomcat 3.1ベースのServletサービスでの動作については、「J2EE ユーザーズガイド(旧版互換)」の「旧機能から新機能への移行方法」-「Servletサービス(Tomcat5.5ベースのサーブレット実行環境)への移行」-「アプリケーションの非互換一覧」を参照してください。

14

レスポンスのデフォルトLocale

"en_US"です。

デフォルトではサーバのLocaleとなります。

15

レスポンスのコミット後またはgetWriterメソッド呼出し後の、setLocaleメソッドまたはsetContentTypeメソッド呼出しのレスポンスのエンコーディングへの反映 (注4)

setLocaleメソッドまたはsetContentTypeメソッド呼出しのレスポンスのエンコーディングへの反映」を参照してください。

16

レスポンスのsetLocaleメソッドまたはsetContentTypeメソッド(引数のmimeタイプ文字列にcharset属性を含む) (注5)によりレスポンスのエンコーディングを設定済みで、setContentTypeメソッドをcharset属性を含まないmimeタイプ文字列を指定して呼び出した場合の動作 (注6)

レスポンスのWriterによるデータの書き出しには反映されますが、レスポンスのContent-Typeヘッダにはcharset属性は付加されません。

Servletの仕様に従い、レスポンスのWriterによるデータの書き出し、Content-Typeヘッダのcharset属性ともに、先に設定済みのエンコーディングが反映されます。

17

レスポンスのsetContentTypeメソッドをcharset属性ありのmimeタイプ文字列を指定して呼び出した (注5)後の、setLocaleメソッドのレスポンスのエンコーディングへの反映 (注6)

反映されます。

Servletの仕様に従い、反映されません。

18

setLocaleメソッドまたはsetContentTypeメソッドでエンコーディングを指定しない場合のレスポンスのエンコーディング

レスポンスのWriterによるデータの書き出しはISO-8859-1となりますが、レスポンスのContent-Typeヘッダに、charset属性は付加されません。

レスポンスのWriterによるデータの書き出し、およびContent-Typeヘッダのcharset属性はISO-8859-1となります。

19

getWriterでcharsetを指定する場合のエラーページ処理のエンコーディングへの反映

getWriterで指定したcharsetの内容が、エラーページ処理に引き継がれません。

getWriterで指定したcharsetの内容が、エラーページ処理に引き継がれます。

getWriterで指定したcharsetの内容が、エラーページ処理に引き継がれません。

20

JSPのpageディレクティブで明示的にpageEncodingまたはcontentType属性を指定しない場合のデフォルトエンコーディング

レスポンスのデータの書き出しはISO-8859-1、Content-Typeヘッダは"text/html;charset=ISO-8859-1"となります。

Tomcat 3.1ベースのServletサービスでの動作については、「J2EE ユーザーズガイド(旧版互換)」の「旧機能から新機能への移行方法」-「Servletサービス(Tomcat5.5ベースのサーブレット実行環境)への移行」-「アプリケーションの非互換一覧」を参照してください。

21

サーブレットのserviceが、永久的に使用不能な状態であること示すUnavailableExceptionをthrowした時の動作

Servlet2.3では規定されていませんが、基本的にステータスコード503を返却。

ステータスコード404を返却。

22

deployment descriptor(web.xml)のtaglibタグ

<taglib>タグは、<web-app>タグの直下に記載します。

web.xmlのバージョンがServlet 2.4以上の場合、<taglib>タグは、<jsp-config>タグ配下に記載します。
web.xmlのバージョンがServlet 2.3以下の場合、<taglib>タグは、<web-app>タグの直下に記載します。

23

server.xml定義ファイルへのrealmの設定

Tomcat4.1と同様のrealmタグを設定することができます。

できません。ディレクトリサービスを使用してください。

server.xml定義ファイルはありませんが、fileレルムなどを使用できます。レルムの設定については、「5.4 セキュリティ機能を利用した運用方法」を参照してください。

24

「コンテキストの共有」有効時のセション

Webアプリケーション環境設定の「コンテキストの共有」を「する」に設定し、Webアプリケーションから別のWebアプリケーションに、RequestDispatcherを使用してディスパッチした場合、ディスパッチ前と後で使用するセションは同じとなります。

Webアプリケーション環境設定の「コンテキストの共有」を「する」に設定し、Webアプリケーションから別のWebアプリケーションに、RequestDispatcherを使用してディスパッチした場合、Servletの仕様に厳密に従い、セションは別のものとなります。セションの属性は共有されません。ディスパッチ前のセションの情報(属性)をディスパッチ後に使用したい場合は、リクエストの属性として(ServletRequest#setAttributeメソッド等を使用して)受渡を行う等、アプリケーションで対応してください。

Interstage Web application deployment descriptor(glassfish-web.xml)の<property>タグで「crossContextAllowed」プロパティを「true」に設定し、Webアプリケーションから別のWebアプリケーションに、RequestDispatcherを使用してディスパッチした場合、Servletの仕様に厳密に従い、セションは別のものとなります。セションの属性は共有されません。ディスパッチ前のセションの情報(属性)をディスパッチ後に使用したい場合は、リクエストの属性として(ServletRequest#setAttributeメソッド等を使用して)受渡を行う等、アプリケーションで対応してください。

25

HttpSessionのgetAttribute(null)呼出し時

nullが返却されます。

NullPointerExceptionとなります。
Servletの仕様では、HttpSessionのsetAttributeメソッドのキーにnullは指定できません。
getAttributeしても値の取得はできませんので、キーがnullの場合は呼び出さないようにしてください。

nullが返却されます。

26

JSPのコンパイル
<jsp:useBean>タグのclass属性

JSPの仕様に沿っていなくてもコンパイル/実行できる場合がありました。

JSPの仕様に沿っていない場合は動作しない可能性があります。
仕様に沿うよう修正することを推奨します。
以下のような修正が必要です。

  • フルクラス名で指定する

  • publicなクラスを指定する

  • publicなデフォルトコンストラクタがあるクラスを指定する

修正しない場合は、事前に充分な動作検証を行ってください。
詳細はJSP仕様を参照してください。

27

HttpSessionListenerのsessionDestroyed

セションが破棄された後に呼び出されます。

セションが破棄される前に呼び出されます。
詳細はServlet仕様を参照してください。

28

HttpSessionBindingListenerのvalueBound

オブジェクトがHttpSessionのgetAttributeで取得できる状態になってから呼び出されます。

オブジェクトがHttpSessionのgetAttributeで取得できる状態になる前に呼び出されます。
またこの影響により、HttpSessionのsetAttributeメソッドですでに存在するキーで別のオブジェクトをsetした場合、先に新しいオブジェクトのvalueBoundメソッド、後からもとのオブジェクトのvalueUnboundメソッドが呼び出されます。
詳細はServlet仕様を参照してください。

29

Webアプリケーション環境定義ファイルのタグの順番

<env-entry>タグ配下は以下の順で記載します。

<env-entry>
<env-entry-name>
entry-name
</env-entry-name>
<env-entry-value>
entry-value
</env-entry-value>
<env-entry-type>
entry-type
</env-entry-type>
</env-entry>

<env-entry>タグ配下は以下の順で記載します。

<env-entry>
<env-entry-name>
entry-name
</env-entry-name>
<env-entry-type>
entry-type
</env-entry-type>
<env-entry-value>
entry-value
</env-entry-value>
</env-entry>

30

JSPのタグの書式

以下の例のように、タグ~閉じタグ(ETag)間に子タグやBODYがなく、改行などがあっても動作する場合がありました。

例:
<jsp:forward page="next.jsp" >
</jsp:forward>

JSP2.0では許可される書式が明示され、左記のような記述はコンパイル時にエラーとなります。JSPの仕様に従い、以下のようにしてください。

例:
<jsp:forward page="next.jsp" ></jsp:forward>
または
<jsp:forward page="next.jsp" />

詳細はJSP2.0またはJSP2.1仕様を参照してください。

31

JSPのBeanのプロパティ値がnullの場合の動作

JSPのBeanのプロパティ値がnullの場合、<jsp:getProperty>アクションの出力は""(空文字列)となります。

例:以下のようなJSPで、プロパティ"age"値がnullの場合
<jsp:useBean id="eb" class="pkg.EmptyBean" scope="session" />
<jsp:getProperty name="eb" property="age" />

JSPの仕様に従い、出力は"null"となります。
以前のServletサービスと同じ出力としたい場合は、以下のいずれかを行ってください。

  • プロパティの初期値を""とするなど、JSPの仕様に従うようにアプリケーションを修正する。(推奨)

Interstage管理コンソールの[ワークユニット] > 「ワークユニット名」 > [環境設定]タブ > [詳細設定] > [ワークユニット設定] > [JavaVMオプション]に「-Dcom.fujitsu.interstage.jservlet.jsp.bean.
getProperty.UseEmptyStringForNull=true」 を設定する。

JSPの仕様に従い、出力は"null"となります。

32

Webアプリケーション環境定義ファイルの<security-constraint>タグ内の<auth-constraint>タグ内の<role-name>タグ

"*"を指定する場合、<security-role>タグを定義しなくてもリソースにアクセスできます。

"*"を指定する場合、<security-role>タグに有効な<role-name>タグが定義されていなければリソースにアクセスできません。

"*"を指定する場合、<security-role>タグに有効な<role-name>タグが定義されていなければ認証が行われません。そのため、web.xmlの<security-role>タグには有効な<role-name>タグを指定してください。

33

JSPのファイルエンコーディング

JSP1.2に従い、JSPファイルを読み込むエンコーディングは、コンパイル単位でした。include先のJSPファイルも、include元とおなじエンコーディングで読み込まれます。
include先のJSPがinclude元のJSPファイルのエンコーディングに依存していた場合、Tomcat5.5ベースのServletサービスでは、include先のJSPファイルにエンコーディングを明に設定することで、同様の動作とすることが可能です。

JSP2.0に従い、JSPファイルを読み込むエンコーディングは、ファイル単位となります。include先のJSPファイルを読み込むエンコーディングは、include元のJSPファイルを読み込むエンコーディングの影響を受けません。(デフォルトISO-8859-1)

Tomcat4.1ベース以前のServletサービスと同様の動作をするには、include先のJSPファイルにエンコーディングを明に設定します。

例:deployment descriptor(web.xml)のバージョンをServlet 2.4以上に修正し、JSPプロパティグループで指定する。
<jsp-property-group>
<url-pattern>/ja/*</url-pattern>
<page-encoding>Shift_JIS</page-encoding>
</jsp-property-group>

詳細は、JSP2.0の仕様(JavaServer Pages 2.0 Specification)を参照してください。

34

JSPでカスタムタグライブラリ使用時の動作

TLD(Tag Library Description file)にて、対象のタグのbody-contentに「TAGDEPENDENT」(大文字)指定でも動作可能です。

TLD(Tag Library Description file)にて、対象のタグのbody-contentに「TAGDEPENDENT」(大文字)は指定できません。仕様に従い、「tagdependent」(小文字)を指定してください。

XML構文のJSP(JSP Documents)の場合、TLD(Tag Library Description file)にて、対象のタグのbody-contentに「tagdependent」(「TAGDEPENDENT」)を指定し、タグのボディで<jsp:text>などを使用した場合、ボディは処理された後にタグライブラリに渡されます。

XML構文のJSP(JSP Documents)の場合、TLD(Tag Library Description file)にて、対象のタグのbody-contentに「tagdependent」を指定し、タグのボディで<jsp:text>などを使用した場合、ボディは処理されずにそのままタグライブラリに渡されます。仕様通りの正しい動作です。

Tomcat4.1ベース以前のServletサービスと同じ動作をさせたい場合は、TLD(Tag Library Description file)にて、body-contentに「JSP」を指定してください。

なおServletの仕様に従い、参照するTLDファイルは必ずWebアプリケーション内に存在している必要があります。

35

サーブレットコンテキストの初期化パラメタ

サーブレットコンテキストの初期化パラメタ(<context-param>タグ)の複数指定時、重複したパラメタ名(<param-name>タグ)がある場合、最後に指定したものが有効となります。

重複したパラメタ名は指定できません。定義エラーとなります。

サーブレットコンテキストの初期化パラメタ(<context-param>タグ)の複数指定時、重複したパラメタ名(<param-name>タグ)がある場合、最初に指定したものが有効となります。

36

無効なセションのgetLastAccessedTimeメソッド呼出し

無効なセション(破棄やタイムアウトしたセション)のgetLastAccessedTimeメソッドを呼出し可能です。

無効なセション(破棄やタイムアウトしたセション)のgetLastAccessedTimeメソッドを呼び出した場合、IllegalStateExceptionとなります。

37

Webアプリケーション環境定義ファイルの<display-name>タグを省略した場合のServletContext#getServletContextName()の値

<display-name>タグを省略した場合はnullが返却されます。
サーブレットコンテキストの名前を指定しない場合(<display-name></display-name>)は空文字が返却されます。

<display-name>タグを省略した場合は空文字が返却されます。
サーブレットコンテキストの名前を指定しない場合(<display-name></display-name>)はnullが返却されます。

38

サーブレットの初期化パラメタ

サーブレットの初期化パラメタ(<init-param>タグ)の複数指定時、重複したパラメタ名(<param-name>タグ)がある場合、最後に指定したものが有効となります。

サーブレットの初期化パラメタ(<init-param>タグ)の複数指定時、重複したパラメタ名(<param-name>タグ)がある場合、最初に指定したものが有効となります。

39

Webアプリケーション環境定義ファイルの<listener-class>タグ

<listener-class>タグに存在しないクラスを指定した場合は、IJServer起動時にコンテナログにエラーが出力され、アプリケーションの状態は"非活性"になります。また、そのアプリケーションにアクセスした場合にはステータスコード404(ファイルが存在しない)が表示されます。

<listener-class>タグに存在しないクラスを指定した場合は、Webアプリケーションの配備に失敗、またはWebアプリケーションの起動に失敗します。

40

JSFの実装クラス

JSFの実装クラスを用意してアプリケーションに含めるか、またはクラスパスに設定する必要があります。

JSFがJava EE に含まれるようになり、Java EEコンテナで実装クラスをロードするため、アプリケーション側でJSFの実装を保持する必要がありません。

また、JSFの実装クラスをアプリケーションやクラスパスに含めた場合は、動作保障ができないため、Java EEで保持しているJSFの実装クラスを利用するようにしてください。

41

ServletRequestのgetServerName

リクエストを受信したサーバのホスト名。

CGI変数のSERVER_NAMEと同じ値が返ります。

リクエストを受信したサーバのホスト名。

リクエストヘッダのHostヘッダの値が返ります。Hostヘッダがない場合は、CGI変数のSERVER_NAMEと同じ値が返ります。

リクエストを受信したサーバのホスト名。

リクエストヘッダのHostヘッダの値が返ります。Hostヘッダがない場合は、以下の通りです。

  • リクエストがWebサーバを経由して送信された場合、CGI変数のSERVER_NAMEと同じ値が返ります。

  • リクエストがWebサーバを経由せず送信された場合、リクエストを受信したサーバのホスト名が返ります。

42

ServletRequestのgetServerPort

リクエストを受信したサーバのポート番号。

CGI変数のSERVER_PORTと同じ値が返ります。

リクエストを受信したサーバのポート番号。

リクエストヘッダのHostヘッダの値が返ります。Hostヘッダがない場合は、CGI変数のSERVER_PORTと同じ値が返ります。

リクエストを受信したサーバのポート番号。

リクエストヘッダのHostヘッダの値が返ります。Hostヘッダがない場合は、以下の通りです。

  • リクエストがWebサーバを経由して送信された場合、CGI変数のSERVER_PORTと同じ値が返ります。

  • リクエストがWebサーバを経由せず送信された場合、リクエストを受信したHTTPリスナーのポート番号が返ります。

43

HttpServletResponseのsendRedirect

指定された相対URLを用いて、クライアントに一時的なリダイレクトレスポンスを送信します。

Servletコンテナによる絶対URLへの変換は、CGI変数のSERVER_NAMEおよびSERVER_PORTと同じ値が使用されます。

指定された相対URLを用いて、クライアントに一時的なリダイレクトレスポンスを送信します。

Servletコンテナによる絶対URLへの変換は、リクエストヘッダのHostヘッダの値が使用されます。Hostヘッダがない場合は、CGI変数のSERVER_NAMEおよびSERVER_PORTと同じ値が使用されます。

指定された相対URLを用いて、クライアントに一時的なリダイレクトレスポンスを送信します。

Webコンテナによる絶対URLへの変換は、リクエストヘッダのHostヘッダの値が使用されます。Hostヘッダがない場合は、以下の通りです。

  • リクエストがWebサーバを経由して送信された場合、WebサーバをCGI変数のSERVER_NAMEおよびSERVER_PORTと同じ値が使用されます。

  • リクエストがWebサーバを経由せず送信された場合、リクエストを受信したサーバのホスト名とリクエストを受信したHTTPリスナーのポート番号が使用されます。

44

HTTPレスポンスのヘッダ数

HTTPレスポンスに設定するヘッダ数の制限」を参照してください。

45

HTTPリクエストパラメータ数

HTTPリクエストパラメータ数/ヘッダ数の制限」を参照してください。

46

HTTPリクエストのヘッダ数

HTTPリクエストパラメータ数/ヘッダ数の制限」を参照してください。

47

HTTPレスポンスヘッダに指定する文字コード

レスポンスヘッダに指定する文字コード」を参照してください。


1)

以下のデフォルト値が設定されます。

env-entry-type

エントリ値

java.lang.Boolean

Boolean.FALSE

java.lang.Byte

値0のByteオブジェクト

java.lang.Character

値0のCharacterオブジェクト

java.lang.String

なし
) javax.naming.NamingExceptionまたはそのサブクラスが投げられます。

java.lang.Short

値0のShortオブジェクト

java.lang.Integer

値0のIntegerオブジェクト

java.lang.Long

値0のLongオブジェクト

java.lang.Float

値0のFloatオブジェクト

java.lang.Double

値0のDoubleオブジェクト

2)

Accept-Language: ja
Accept-Language: es

3)

Tomcat4.1ベースのServletサービスからの移行の場合、<welcome-file>でディレクトリ階層の異なるパス(途中に'/'を含むパス)を指定し、そのパスで示されるコンテンツから相対パスのリンクがあると、リンク先が意図したURIとならず、コンテンツが参照できない場合があります。以下のどちらかの対応を行ってください。

  • <welcome-file>でディレクトリ階層の異なるコンテンツを指定しない。

  • <welcome-file>で指定したページ中のリンクについて、コンテキストパスを含むパスとする。

    <welcome-file>が「/jsp/welcome.jsp」、Webアプリケーション名が「sample」、JSPからのリンクが「../next.jsp」の場合、リンク先を、「/sample/next.jsp」とする。

動的コンテンツ(JSPやServlet)の場合は、以下のようにコンテキストパスを動的に取得することも可能です。(推奨)

  • リンク先を、request.getContextPath()+"/next.jsp" とする。

※実際には、必要に応じてHttpServletResponseのencodeURLメソッド等をあわせて使用してください。

4)

仕様に従っていないアプリケーションの場合であり、記載のTomcat4.1ベースのServletサービスの動作が保障されるものではありません。

5)

JSPのpageディレクティブでpageEncoding属性を指定している場合、または、contentType属性にcharsetを指定している場合も含まれます。

6)

No.15が前提です。


setLocaleメソッドまたはsetContentTypeメソッド呼出しのレスポンスのエンコーディングへの反映

Tomcat4.1ベースのServletサービス

Tomcat5.5ベースのServletサービス

Java EE 7機能のWebコンテナ

getWriterメソッド

レスポンスのコミット

Content-Typeヘッダのcharset属性

データの書き出し

Content-Typeヘッダのcharset属性

データの書き出し

Content-Typeヘッダのcharset属性

データの書き出し

呼出し前

コミット前

反映される

反映される

反映される

反映される

反映される

反映される

コミット後

反映されない

反映されない

反映されない

反映されない

反映されない

反映されない

呼出し後

コミット前

反映される

反映される

反映されない

反映されない

反映されない

反映されない

コミット後

反映されない

反映されない

反映されない

反映されない

反映されない

反映されない