Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

4.32.5 JSP 2.0仕様で追加,変更された仕様についての注意事項

JSP 2.0仕様で追加,変更された仕様を,Cosminexus上で利用するときの注意事項を示します。JSP 2.0仕様およびJSP 1.2仕様については,それぞれの仕様書(JSP 2.0仕様書,JSP 1.2仕様書)を参照してください。

<この項の構成>
(1) JSPドキュメントのデフォルト拡張子
(2) タグファイルのJavaソースファイルとクラスファイルの出力先
(3) JSP EL式の評価APIの複数指定
(4) XMLシンタックスで記述されたJSPファイルとタグファイル
(5) pageディレクティブのisThreadSafe属性の非推奨化について
(6) JSPドキュメントのHTTPレスポンスのContentTypeのデフォルト値について
(7) タグライブラリ・ディスクリプタ(TLDファイル)の配置について
(8) javax.servlet.jsp.tagext.PageDataクラスのgetInputStreamメソッドで取得できるXMLビュー情報について
(9) includeディレクティブでインクルードされるファイルのデフォルトの文字コードについて
(10) JSPドキュメント内の矛盾する文字コードについて
(11) JSPドキュメントでのHTTPレスポンスの文字コードのデフォルト値について
(12) pageディレクティブのpageEncoding属性の複数回指定について
(13) JSPドキュメントのタグライブラリの宣言でtaglibマップに登録されていないuriを記述した場合について
(14) JSPドキュメントの文字コードについて
(15) EL(Expression Language)のエスケープシーケンスについて

(1) JSPドキュメントのデフォルト拡張子

JSP 2.0仕様では,JSPドキュメントの標準的な拡張子を「jspx」としています。Cosminexusで利用するWebコンテナでは,「jspx」を拡張子としたファイルは,デフォルトマッピングによってweb.xmlにURLマッピング定義しなくてもJSPドキュメントとして扱われます。

(2) タグファイルのJavaソースファイルとクラスファイルの出力先

タグファイルは,JSPファイルと同様に,JSPのコンパイルによってJavaソースファイルとクラスファイルが生成されます。Javaソースファイルおよびクラスファイルは,JSPコンパイル結果の出力先ディレクトリに出力されます。

JSPコンパイル結果の出力先ディレクトリは変更できます。なお,生成されるJavaソースファイル,およびクラスファイルのパスがOSの上限を超える場合は,出力先ディレクトリを変更する必要があります。

JSPコンパイル結果の出力先ディレクトリについては,JSP事前コンパイル機能を使用している場合,「4.7.5(2) JSPコンパイル結果の出力先」,JSP事前コンパイル機能を使用してない場合,「4.7.6(3) JSPコンパイル結果の出力先」を参照してください。

(3) JSP EL式の評価APIの複数指定

JSP 2.0仕様では,EL式の構文解析と評価をするAPIとして次のAPIが提供されます。

JSP 2.0仕様では,これらのAPIから複数のEL式を指定することはできませんが,Cosminexusでは,複数のEL式を指定できます。

(4) XMLシンタックスで記述されたJSPファイルとタグファイル

(5) pageディレクティブのisThreadSafe属性の非推奨化について

pageディレクティブのisThreadSafe属性は,javax.servlet.SingleThreadModelインタフェースが非推奨となったことによって,JSP 2.0仕様では非推奨とされています。

Cosminexusでは,Webアプリケーションのバージョンに関係なく,pageディレクティブのisThreadSafe属性を使用できます。ただし,Servlet 2.4仕様で,javax.servlet.SingleThreadModelインタフェースが非推奨となった理由に注意して使用してください。

(6) JSPドキュメントのHTTPレスポンスのContentTypeのデフォルト値について

JSP 2.0仕様では,JSPドキュメントを使用した場合に,デフォルトのContentTypeの値が「text/xml」になると追記されています。

Cosminexusでは,JSP 2.0の場合は「text/xml」,JSP 1.2の場合は「text/html」をデフォルトとして動作します。

(7) タグライブラリ・ディスクリプタ(TLDファイル)の配置について

JSP 2.0仕様では,タグライブラリ・ディスクリプタの配置場所についての規定が追加されています。

Cosminexusでは,配置するディレクトリによって,Webアプリケーションの開始時およびJSPのコンパイル時にKDJE39289-Wのメッセージが出力されることがあります。ただし,エラーとはならないでWebアプリケーションが実行されます。

メッセージが出力される条件を次に示します。

配置するディレクトリ
  • /WEB-INFディレクトリ以下以外
  • /WEB-INF/classesディレクトリ以下
  • /WEB-INF/libディレクトリ以下

メッセージが出力されるタイミング
  • 該当するタグライブラリ・ディスクリプタを,web.xmlの<taglib><taglib-location>タグに指定して,Webアプリケーション開始するとき
  • 該当するタグライブラリ・ディスクリプタを,タグライブラリの宣言で直接指定して使用するJSPをコンパイルするとき

(8) javax.servlet.jsp.tagext.PageDataクラスのgetInputStreamメソッドで取得できるXMLビュー情報について

javax.servlet.jsp.tagext.PageDataオブジェクトのgetInputStreamメソッドで取得できるXMLビュー情報の仕様が,JSP 2.0仕様で変更されています。getInputStreamメソッドは,javax.servlet.jsp.tagext.TagLibraryValidatorクラスのvalidateメソッドの第三引数に指定して使用されます。

Cosminexusでの変更点を,JSP 2.0とJSP 1.2に分けて示します。

(a) jsp:id属性

JSP 2.0
jsp:id属性を付加します。

JSP 1.2
jsp:id属性を付加しません。
(b) XMLビューの文字エンコード

JSP 2.0
XMLビューの文字エンコードを常にUTF-8とし,文字コードをUTF-8としてXML宣言を出力します。

JSP 1.2
XMLビューの文字エンコードを常にUTF-8とし,文字コードをUTF-8としてXML宣言を出力しません。
(c) pageディレクティブのpageEncoding属性

JSP 2.0
pageEncoding属性の値をUTF-8に設定します。pageEncoding属性がない場合は,pageEncoding属性を追加します。

JSP 1.2
pageEncoding属性の値は変更しません。
(d) pageディレクティブのcontentType属性

JSP 2.0
contentType属性の値にServletResponseクラスのsetContentTypeメソッドで設定された値を設定します。contentType属性がない場合は,contentType属性を追加します。

JSP 1.2
contentType属性の値は変更しません。

(9) includeディレクティブでインクルードされるファイルのデフォルトの文字コードについて

JSP 2.0仕様では,pageディレクティブのpageEncoding属性は,pageEncoding属性を記述したファイルにだけ適用されることが追記されています。

Cosminexusでは,Webアプリケーションのバージョンに関係なく,includeディレクティブでファイルをインクルードするときに,インクルード先のファイルに文字コードの指定がないと,インクルード元の文字コードがインクルード先のファイルに適用されます。

(10) JSPドキュメント内の矛盾する文字コードについて

JSPドキュメントでのXML宣言に指定する文字コードと,JSPドキュメントでのpageディレクティブのpageEncoding属性に指定する文字コードが異なる場合の仕様がJSP 2.0仕様では追記されています。JSP 1.2仕様には記述がありません。

Cosminexusで文字コードが異なる場合の制御を,JSP 2.0とJSP 1.2に分けて示します。

JSP 2.0
JSPコンパイルエラーとなります。

JSP 1.2
pageディレクティブのpageEncoding属性が使用されます。

(11) JSPドキュメントでのHTTPレスポンスの文字コードのデフォルト値について

JSPドキュメントでpageディレクティブのcontentType属性がない場合や,属性にCHARSET値がない場合に使用されるHTTPレスポンスのデフォルトの文字コードがJSP 2.0仕様では追記されています。

Cosminexusでのデフォルト値を,JSP 2.0とJSP 1.2に分けて示します。

JSP 2.0
UTF-8が使用されます。

JSP 1.2
ISO-8859-1が使用されます。

(12) pageディレクティブのpageEncoding属性の複数回指定について

pageディレクティブのpageEncoding属性の複数回指定について,JSP 2.0仕様では仕様が変更されています。

JSP 2.0仕様では,トランスレーション単位(JSPとincludeディレクティブでインクルードされるファイル)でpageEncoding属性の複数回指定ができるようになっています。また,同じJSPファイル内でpageEncoding属性の複数回指定をするとコンパイルエラーとなることが追記されています。

Cosminexusでは,Webアプリケーションのバージョンに関係なく,トランスレーション単位でpageEncoding属性の複数回指定ができます。このとき,ファイル単位に指定した値が該当するファイルに適用されます。また,同じJSPファイル内でのpageEncoding属性の複数回指定については,JSP 2.0とJSP 1.2で仕様が異なります。Cosminexusでの仕様を,JSP 2.0とJSP 1.2に分けて示します。

JSP 2.0
一つのファイルに1回だけ指定できます。複数回指定した場合は,JSPコンパイルエラーとなります。

JSP 1.2
一つのファイルに複数回指定できます。最初に記述した値が適用されます。

(13) JSPドキュメントのタグライブラリの宣言でtaglibマップに登録されていないuriを記述した場合について

JSPドキュメントでnamespaceを使ってタグライブラリを宣言し,指定したuriがtaglibマップ(uriとタグライブラリ・ディスクリプタのマッピング)で見つからない場合の動作について,JSP 2.0仕様では追記されています。

Cosminexusでの動作を,JSP 2.0とJSP 1.2に分けて示します。

JSP 2.0
指定したuriがtaglibマップに登録されていない場合,uriのnamespaceで定義されたアクションは,解析しないで扱われます(テキストとして出力されます)。

JSP 1.2
  • uriが絶対URIの場合
    トランスレーションエラーとなります。
  • uriが絶対URI以外の場合
    Webアプリケーション内のパスとしてTLDファイル(タグライブラリ・ディスクリプタ)を検索して使用されます。TLDファイルがない場合は,トランスレーションエラーとなります。

(14) JSPドキュメントの文字コードについて

JSPドキュメントでのファイルの文字コードの決定方法について,JSP 2.0仕様で仕様が変更されています。

Cosminexusでの文字コードの決定方法を,JSP 2.0とJSP 1.2に分けて示します。

JSP 2.0
XML 1.0の仕様に従い,XML宣言に従います。XML宣言がない場合はデフォルト値のUTF-8となります。

JSP 1.2
pageディレクティブのpageEncoding属性に従います。pageEncoding属性がない場合はcontentType属性のcharset=で指定した文字コードに従います。どちらもない場合はデフォルト値のISO-8859-1になります。

(15) EL(Expression Language)のエスケープシーケンスについて

JSP2.0仕様であるELの開始を示す"${"に含まれる"$"を文字列として表すエスケープシーケンスについて,JSP仕様と,Cosminexusで利用するWebコンテナの仕様を次に示します。

Cosminexusで利用するWebコンテナでは,"\$"はエスケープシーケンスによって,"$"と出力されます。"\$"と出力したい場合は,"\\$"と記述します。

"\$"と記述した場合の動作を,JSP2.0とJSP1.2に分けて示します。

JSP2.0
JSP2.0仕様では,ELの設定を無効に設定している場合,"$"はELの開始文字とする必要がなく,"\"は制御コードとしては扱われません。JSP2.0で動作する場合は,ELの設定を有効にしているかどうかによって,"\$"の出力結果が異なります。JSP2.0で動作する場合の"\$"の出力結果を次の表に示します。

表4-55 JSP2.0で動作する場合の"\$"の出力結果

ELの設定の有効/無効 仕様 出力結果
有効 JSP2.0仕様 "$"
Cosminexusで利用するWebコンテナ "$"
無効 JSP2.0仕様 "\$"
Cosminexusで利用するWebコンテナ "$"
ELの設定を無効にする場合は,次に示すどれかの方法で設定します。
  • pageディレクティブのisELIgnored属性にtrueを指定する。
  • tagディレクティブのisELIgnored属性にtrueを指定する。
  • web.xmlの<el-ignored>タグにtrueを指定する。

JSP1.2
JSP1.2仕様では"$"は予約語ではありません。"\"は制御コードとしては扱われないため,"\$"と出力されます。
JSP1.2で動作する場合の"\$"の出力結果を次の表に示します。

表4-56 JSP1.2で動作する場合の"\$"の出力結果

仕様 出力結果
JSP1.2仕様 "\$"
Cosminexusで利用するWebコンテナ "$"