ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server 移行ガイド

4.2.3 アプリケーションの非互換一覧

  Tomcat3.1ベースのServletサービス、Tomcat4.1ベースのServletサービスと、Tomcat5.5ベースのServletサービス(V9のIJServer)のアプリケーション動作の非互換項目を以下に示します。該当する機能をWebアプリケーションで使用している場合には、Webアプリケーションを修正してください。  

  Servlet/JSP仕様の差分については、Java(TM) Servlet SpecificationおよびJavaServer Pages(TM) Specificationをあわせて参照してください。
またシステム移行の際には、運用前に業務の観点で十分な動作検証を実施してください。

No.

機能

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

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

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

1

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

カスタムタグの開発で実装するjavax.servlet.jsp.tagext.Tagインタフェースのpublic void release()メソッドは、カスタムタグを使用したページの呼び出しが終わるごとに呼び出されます。

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

2

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

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

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

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

3

JSPの呼び出し

JSPファイルを更新した場合、前回コンパイルされたJSPファイルとファイル更新日時が異なる場合に反映されます。(反映はServletコンテナ再起動、またはリロード機能有効時)

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

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

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

4

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

0を指定した場合は、サーブレット・コンテナ起動時にロードされません。

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

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

5

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

サーブレット・コンテナ環境定義ファイルのContextManagerタグのerrResponse属性で、リクエストの処理でErrorやExceptionが発生した場合、Webブラウザにスタックトレースを表示するかどうかを指定します。

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

6

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

指定していない名前を記述した場合は、無効となります。

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

7

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

welcome fileを省略した場合、サーブレット・コンテナ環境定義ファイルで記述するContext定義のdirList属性の指定により、その実体となるディレクトリ配下のディレクトリやファイルの一覧、またはステータスコード404(ファイルが存在しない)が表示されます。

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

  1. index.html

  2. index.htm

  3. index.jsp

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

8

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

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

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

Tomcat3.1ベースのServletサービスと同じ動作をさせる場合には、Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [環境設定]タブ > [詳細設定] > [ワークユニット設定] > [JavaVMオプション]に“-Dcom.fujitsu.interstage.jservlet.naming.defaultenventry=FALSE”を設定してください。

Tomcat3.1ベースのServletサービスと同じ動作をさせる場合には、deployment descriptor(web.xml)から、該当する<env-entry>タグを削除してください。

9

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

無効となります。

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

10

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

“XML parsing error on file”がコンテナの標準出力、標準エラー出力のログに出力されるが、サーブレット・コンテナの起動に成功します。

メッセージ“IJServer15111”がコンテナログに出力され、Servletコンテナの起動に失敗します。

11

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

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

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

12

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

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

  • URLが“/”で終わっている場合、<welcome-file>タグに指定されたコンテンツに内部でforwardします。そのため、指定したコンテンツ(JSP等)先で取得できるリクエストのURLなどのパス情報は、forwardされたコンテンツのものとなります。

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

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

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

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

(3)

13

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

  • version属性(※)に4.1を指定または省略している場合
    “,”で区切られた値を1つの要素としてEnumerationが返されます。
    例)
      ja, es

  • version属性(※)に5.0または5.1を指定している場合
    1つ1つの値が1つの要素としてEnumerationが返されます。
    例)
      ja
      es

※サーブレット・コンテナ環境定義ファイルのContextManagerタグ内

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

14

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

"en"です。

"en_US"です。

Servletの仕様に準拠し、デフォルトではサーバの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)

反映されます。

Servlet2.4の仕様に従い、反映されません。

18

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

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

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

19

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

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

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

20

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

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

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

Servlet2.4の仕様に従い、ステータスコード404を返却。

21

deployment descriptor(web.xml)のtaglibタグ

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

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

<taglib>タグは、<jsp-config>タグ配下に記載します。

22

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

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

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

23

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

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

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

24

HttpSessionのgetAttribute(null)呼び出し時

NullPointerExceptionとなります。

nullが返却されます。

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

25

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

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

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

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

  • publicなクラスを指定する

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

修正しない場合は、事前に充分な動作検証を行ってください。
JSP2.0の仕様の詳細は、JavaServer Pages 2.0 Specificationを参照してください。

26

HttpSessionListenerのsessionDestroyed

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

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

27

HttpSessionBindingListenerのvalueBound

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

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

28

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>

29

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の仕様の詳細は、JavaServer Pages 2.0 Specificationを参照してください。

30

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” を設定する。

31

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

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

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

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

32

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

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

例:deployment descriptor(web.xml)をServlet2.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)を参照してください。

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

33

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

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

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

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

  • XML構文のJSP(JSP Documents)の場合、TLD(Tag Library Description file)にて、対象のタグのbody-contentに“tagdependent”を指定し、タグのボディで<jsp:text>などを使用した場合、ボディは処理されずにそのままタグライブラリに渡されます。仕様通りの正しい動作です。
    Tomcat3.1ベース/ Tomcat4.1ベースのServletサービスと同じ動作をさせたい場合は、TLD(Tag Library Description file)にて、body-contentに“JSP”を指定してください。

34

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

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

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

35

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

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

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

  注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)

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

  注5)

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

  注6)

No.15が前提です。


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

  

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

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

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

getWriterメソッド

レスポンスのコミット

Content-Typeヘッダのcharset属性

データの書き出し

Content-Typeヘッダのcharset属性

データの書き出し

Content-Typeヘッダのcharset属性

データの書き出し

呼び出し前

コミット前

反映される

反映される

反映される

反映される

反映される

反映される

コミット後

反映されない

反映される

反映されない

反映されない

反映されない

反映されない

呼び出し後

コミット前

反映される

反映されない

反映される

反映される

反映されない

反映されない

コミット後

反映されない

反映されない

反映されない

反映されない

反映されない

反映されない