Sun Java System Application Server 8.2 リリースは Java 2 Platform, Enterprise Edition, version 1.4 に基づいています。Sun Java System Application Server 7 リリースは Java 2 Platform, Enterprise Edition, version 1.3 に基づいています。
ほとんどの既存のプログラムは、何も変更しなくても Sun Java System Application Server 8.2 リリースで実行できるはずです。しかし、まれな状況や「コーナーケース」で発生するいくつかのマイナーな潜在的な非互換性も存在しているためその状況に対処できるように補足としてここで説明します。
Java Servlet 仕様 Version 2.4 は Sun Java System Application Server 8.2 リリースに付属しており、次の URL からダウンロードできます。
http://java.sun.com/products/servlet/
Version 2.3 の仕様は J2EE 1.3 SDK に付属していました。次の各項目は、これらのリリース間の互換性の問題について説明しています。
HttpSessionListenersessionDestroyedメソッドは、これまではセッションが無効化されたことを通知するために使用されていました。今回のリリースでは、このメソッドはセッションが無効化されようとしていることを通知するために使用されるようになったので、セッションの無効化の前に通知を行います。以前の動作を前提としてコードが作成されている場合は、新しい動作に合うように変更する必要があります。
ServletRequest,getRemotePort,getLocalName,getLocalAddr,getLocalPort
今回のバージョンの仕様では、ServletRequest インタフェースに次のメソッドが追加されています。この追加によって、開発者が ServletRequest インタフェースを実装した場合などに、ソース互換性が失われる場合があるので注意が必要です。このような場合は、次の新しいメソッドがすべて実装されていることを確認します。
public int getRemotePort()は、クライアントのインターネットプロトコル (IP) のソースポートまたは最後に要求を送信したプロキシを返します。
public java.lang.String getLocalName() は、要求を受信した IP インタフェースのホスト名を返します。
public java.lang.String getLocalAddr() は、要求を受信したインタフェースの IP アドレスを返します。
public int getLocalPort() は、要求を受信したインタフェースの IP ポート番号を返します。
Java Server Pages (JSP) 仕様 2.0 は Sun Java System Application Server 8.2 リリースに付属しており、次の URL からダウンロードできます。
http://java.sun.com/products/jsp/
JSP 仕様 1.2 は J2EE 1.3 SDK に付属していました。JSP 2.0 仕様は、可能な限り JSP 1.2 仕様との完全な下位互換を保つように配慮されています。JSP 1.2 仕様には一部あいまいな部分がありましたが、これらは JSP 2.0 仕様で明確化されています。いくつかの JSP 1.2 コンテナは異なる動作を行うため、コンテナ固有の動作に依存するアプリケーションについては、JSP 2.0 環境で正しく動作するように調整しなければならない場合があります。
JSP に関連する既知の下位互換性の問題を次に示します。
名前空間を認識せず、プレフィックスパラメータのみに依存するタグライブラリのバリデータは、いくつかの JSP 2.0 ページの妥当性を正しく検査できない可能性があります。これは、XML ビューでは jsp:root 以外の要素にタグライブラリ宣言が格納されていることがあり、同じタグライブラリ宣言が異なるプレフィックスを使用して何度も格納される可能性があるからです。これらの代わりに、タグライブラリのバリデータでは常に uri パラメータを使用するようにしてください。既存のタグライブラリを含む既存の JSP ページでは何も問題は発生しません。
いくつかのコンテナで、I18N の動作が異なっていることがあります。これは主に JSP 1.2 仕様のあいまいさが原因です。可能な限り、下位互換性への影響を最小限に抑えるための手段が講じられた結果、全体的に I18N のテクノロジ機能は大幅に改善されました。
JSP 2.0 より前の JSP 仕様のバージョンでは、XML 構文の JSP ページと標準構文の JSP ページは、同じ方法でページエンコーディングを決定していました。つまり、それぞれのページ指令の pageEncoding または contentType 属性を調べることによってページエンコーディングを決定しており、どちらの属性も存在しない場合は、デフォルトで ISO-8859-1 が設定されていました。
JSP 仕様 v2.0 からは、JSP ドキュメントのページエンコーディングは、XML 仕様のセクション 4.3.3 および付録 F.1 の説明のとおりに決定されており、これらのページの pageEncoding 属性は、XML 仕様のとおりに決定されたページエンコーディングとの整合性を確認するだけのためにチェックされます。
この変更の結果、pageEncoding 属性から決定されるページエンコーディングに依存する JSP ドキュメントは、正しくデコードされなくなりました。したがって、これらの JSP ドキュメントには適切な XML エンコーディング宣言を追加する必要があります。
また、JSP 1.2 仕様のページエンコーディングは変換ユニットごとに決定されますが、JSP 2.0 仕様のページエンコーディングは、ファイルごとに決定されます。したがって、.jsp に b.jsp が静的に含まれており、ページエンコーディングは b.jsp ではなく a.jsp で指定されている場合、JSP 1.2 仕様では、b.jsp に対して a.jsp のエンコーディングが使用されますが、JSP 2.0 仕様では b.jsp に対してデフォルトのエンコーディングが使用されます。
型強制規則 (JSP 2.0 仕様の表 JSP.1-11 参照) は、EL 強制規則との整合性がとられました。このため、いくつかの例外条件について、JSP 2.0 仕様では例外が発生しなくなりました。特に、空の文字列を数値タイプの属性に渡した場合、これまでは変換エラーか NumberFormatException が発生していましたが、JSP 2.0 仕様では、代わりに 0 が渡されるようになりました。詳細については、JSP 2.0 仕様の 表 JSP.1-11 を参照してください。通常、この調整により問題が発生することはありません。なぜなら、これらは JSP 1.2 仕様の例外条件であり、この仕様ではこれらの例外が変換時または要求時に発生することが許容されていたからです。
JSP コンテナは web.xml を使用して、さまざまなコンテナ機能のデフォルト動作を決定します。次の項目は、JSP 開発者が web.xml ファイルをサーブレットバージョン 2.3 仕様からサーブレットバージョン 2.4 仕様にアップグレードするときに注意すべき点を示したものです。
EL 式は、JSP 1.2 テクノロジによって作成されたアプリケーションでは、デフォルトで無視されます。Web アプリケーションを JSP 2.0 仕様にアップグレードする場合、EL 式はデフォルトで解釈されます。エスケープシーケンス \\$ を使用して、コンテナによって解釈されるべきではない EL 式をエスケープすることができます。あるいは、isELIgnored ページ指令や、el-ignored 設定要素によって、変換ユニット全体に対して EL を無効化することもできます。JSTL 1.0 のユーザーは、taglib/ インポートを JSTL 1.1 URI にアップグレードするか、_rt バージョンのタグを使用する必要があります (たとえば、c の代わりに c_rt 、fmt の代わりに fmt_rt を使用)。
拡張子が .jspx のファイルは、デフォルトで JSP ドキュメントとして解釈されます。JSP 設定要素 is-xml を使用して、.jspx ファイルを正規の JSP ページとして処理します。JSP コンテナから.jspx の関連付けを解除する方法はありません。
エスケープシーケンス \\$ は、JSP 1.2 仕様では予約されていませんでした。JSP 1.2 仕様では、\\$ という表示のテンプレート文字や属性値を使用すると \\$ と出力されていましたが、現在では $ のみが出力されます。