Oracle Containers for J2EE JavaServer Pages開発者ガイド 10g(10.1.3.1.0) B31860-01 |
|
JavaServer Pagesテクノロジは、XML文書の作成に効果的なモデルであるとの認識が高まっています。JSP 2.0でリリースされた、XML構文の改善を含めた新しい拡張機能によって、JSPテクノロジはXMLテクノロジをさらに補完するものとなり、XMLツールへのアクセスもより容易になりました。
OC4J JSPコンテナは、JavaServer Pages 2.0仕様で説明されているJavaServer PagesによるXMLのサポートを完全に実装しています。これには、次のサポートが含まれます。
<jsp:root>
要素は不要)
<jsp:element>
および<jsp:attribute>
標準タグ要素のサポート
この章には、次の各項が含まれます。
カスタム・タグを介してOC4Jで提供されるXMLとXSLのJSPサポートの詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。
XMLに関する一般情報は、次のWebサイトでXML仕様を参照してください。
http://www.w3.org/XML/
JSPドキュメントという用語は、XML構文で作成されたJSPページを指します。JSPドキュメントは、純粋なXML構文内で適切に構成されており、名前空間を識別します。JSPドキュメントでは、JSP XMLコア構文および使用する標準アクション・タグおよびカスタム・タグ・ライブラリの構文を指定するために、XML名前空間が使用されます。対照的に、従来のJSPページは通常、XML文書ではありません。
JSPドキュメントには、次のような利点があります。
標準アクション・タグやカスタム・タグなどの多くのJSP構文の要素は、すでにXML構文で作成されています。互換性のないJSP要素に対しては、対応するXML要素が提供されています。詳細は、「JSPドキュメントの使用」を参照してください。
OC4JのJSPコンテナは、次のいずれかを検出すると、そのファイルをJSPドキュメントとして識別します。
web.xml
デプロイメント・ディスクリプタ内の<is-xml>
要素<is-xml>
は、ファイルをJSPドキュメントとして識別するために使用される、<jsp-property-group>
要素のサブ要素です。たとえば、このweb.xml
というコードでは、.svg
拡張子を持つファイル(<url-pattern>
サブ要素で指定)をJSPドキュメントとして識別します。
<web-app ...> <jsp-config> <jsp-property-group> <description>Define files with SVG extension as JSP documents</description> <url-pattern>*.svg</url-pattern> <is-xml>true</is-xml> </jsp-property-group> </jsp-config> </web-app>
<is-xml>
定義は、次に説明するすべてのインジケータをオーバーライドします。
.jspx
ファイル拡張子 この拡張子はJSP 2.0で新しくサポートされるようになりました。これは明示的にファイルをJSPドキュメントとして定義します。タグ・ファイルもXML構文で作成することが可能で、.tagx
拡張子によってコンテナに識別されます。タグ・ファイルの詳細は、「タグ・ファイルとは」を参照してください。
<jsp:root>
要素この要素には、JSP XMLコア構文用の名前空間仕様、および使用するカスタム・タグ・ライブラリ用の名前空間仕様が含まれます。この要素はJSP 1.2では必須でしたが、JSP 2.0ではオプションになったため、ユーザーが自分でルート要素を指定できます。
JSPドキュメントに対するセマンティック・モデルは従来のページと同様です。JSPドキュメントは、対応する構文を使用した従来のページと同じ一連の操作と結果を指示します。空白の処理はXSLT規則に従います。JSPドキュメントのノードが識別されると、空白のみのテキスト・ノードは、テンプレート・データ用の<jsp:text>
要素内である場合を除き、文書から削除されます。<jsp:text>
要素の内容は、そのまま保持されます。
XMLビューは、JSPページから導出されるXMLドキュメントで、ページの妥当性チェックに使用されます。XMLビューは、JSP変換時にOC4J JSPコンテナによって生成されます。JSP 2.0仕様の中で、XMLビューは「XML構文または従来の構文で記述されたJSPページと、それを説明するXML文書との間のマッピング」として定義されています。
JSP仕様1.2以降、すべてのタグ・ライブラリがそのTLD内に<validator>
要素を保持し、妥当性チェックを実行できるクラスを指定できます。このようなクラスは、タグ・ライブラリ・バリデータ(TLV)・クラスと呼ばれます。TLVクラスの目的は、タグ・ライブラリを使用するJSPページが、実装した必要な制約に準拠しているかどうか検証することです。バリデータ・クラスは、その妥当性チェックのソースとしてJSP XMLビューを使用します。
JSPドキュメントの場合、JSP XMLビューはページ・ソースとほぼ同じです。相違点は、XMLビューがinclude
ディレクティブに従って拡張される点です。他の相違点は、改善されたエラー・レポートに関するID属性がすべてのXML要素に追加される点です。
従来のJSPページの場合、Webコンテナは、一連の変換を実行してページからXMLビューを作成します。詳細は、「JSP XMLビューについて」を参照してください。
つまり、JSP XML構文を必要に応じて使用して、XML互換のJSPページを作成できます。対照的に、JSP XMLビューはWebコンテナの機能で、ページの妥当性チェックに使用されます。
ここでは、JSPドキュメントの構文について、より詳しく説明します。全体の解説は、Sun社のJSP仕様を参照してください。
JSP XML構文には、次の要素を含めることができます。この構文には、<%-- comment --%>
以外のすべてのJSP要素について、XMLの対応する要素または置換要素が含まれています。
<jsp:root ...>
要素(オプション): JSP XMLコア構文用の名前空間仕様、および使用するカスタム・タグ・ライブラリ用の名前空間仕様が含まれます。この要素はJSP 2.0ではオプションのため、ユーザーが自分でルート要素を指定できます。
page
ディレクティブおよびinclude
ディレクティブ
<jsp:attribute>
および<jsp:element>
要素: 要素のボディおよび属性値に式言語(EL)式を含めることができます。
<jsp:text>
: 静的なテンプレート・データ用
前述のとおり、標準のJSP構文の大半はすでにXML互換のため、XML要素形式でJSPドキュメント内で使用できます。互換性のないJSP要素に対しては、次の表8-1で示すとおり、対応するXML要素のセットが提供されています。
JSPドキュメントにはルート要素が必要です。JSP 2.0より前のリリースでは、<jsp:root>
要素をルートとして使用する必要がありました。この要素はまだ使用できますが、必須ではなくなりました。したがって、ユーザーが自分でルート要素を指定できます。この柔軟性により、任意のXML文書をJSPドキュメントとして使用することが可能になります。
後述のドキュメントの例では、ルート要素はhtml
です。また、次の項で説明するとおり、ルート内で、ドキュメントで使用するタグ・ライブラリを宣言できます。
JSPドキュメントおよびそのリクエスト出力には、XML宣言を含める必要はありません。それどころか、JSPドキュメントがXML出力を生成しない場合、ドキュメントにXML宣言を含めることができません。
JSPドキュメントでは、ドキュメント内に標準アクション・タグおよびカスタム・タグを含めるために、XML名前空間を使用します。XML名前空間は、XMLの要素タイプと属性名のコレクションです。
JSPページと異なり、<jsp:useBean>などの標準アクション・タグは暗黙的に使用できません。かわりに、これらの要素に続けて、コアJSP XML構文の名前空間を識別する名前空間を含める必要があります。
xmlns:jsp="http://java.sun.com/JSP/Page"
また、使用する各カスタム・タグ・ライブラリ用のxmlns
属性を含めて、タグ・ライブラリの接頭辞と名前領域を指定する必要があります。つまり、タグ使用の妥当性チェックに使用するための対応するTLDまたはタグ・ファイル・ライブラリをポイントする必要があります。これらのxmlns
設定は、従来のJSPページのtaglib
ディレクティブと等価です。
タグ・ライブラリをポイントするには、URNまたはURIのいずれかを使用できます。次の例では、JSTLの接頭辞c
とカスタム・タグの接頭辞my
の名前空間をhtml
ルート要素で宣言しています。
<html xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:my="urn:jsptagdir:/WEB-INF/tlds/mylib" > ...body of document... </html>
URNはアプリケーション相対パスを示し、次のいずれかの形式を使用する必要があります。
urn:jsptld:
path
"。パスは1つのタグ・ライブラリをポイントします。taglib
ディレクティブのuri
属性の場合と同様です。
urn:jsptagdir:path
"。パスは/WEB-INF/tags/
で始まり、WEB-INF/tags/
ディレクトリまたはそのサブディレクトリの1つにインストールされたタグ・ファイルとして実装されているタグ拡張子をポイントします。
URIは完全なURLの場合があります。そうでない場合は、web.xml
ファイルの<taglib>
要素、またはWEB-INF/lib
のJARファイル内か、WEB-INF
内のTLDの<uri>
要素のマッピングに従います。「主要なweb.xmlデプロイメント・ディスクリプタ・エントリ」および「単一のJARファイルへの複数のタグ・ライブラリとTLDのパッケージング」を参照してください。
前述の例のようにタグ・ライブラリをルート要素のxmlns
属性として宣言すると、ドキュメント内のすべての要素がそれらのライブラリにアクセスできます。ただし、これは必須ではありません。タグ・ライブラリをドキュメント内の使用箇所で参照し、タグ・ライブラリを特定の要素から使用するように有効範囲を設定できます。
たとえば、次の例では、c
接頭辞によって参照されるタグ・ライブラリの使用を<c:forEach
要素に制限しています。
<c:forEach xmlns:c="http://java.sun.com/jsp/jstl/core" var="counter" begin="0" end=${4}> ... </c:forEach>
page
ディレクティブとinclude
ディレクティブに対応するJSP XML要素があります。page
ディレクティブまたはinclude
ディレクティブを、対応するJSP XML要素に変換するのは簡単な作業です。次に例を示します。
次にpage
ディレクティブの例を示します。
<%@ page language="java" import="com.tks.ourpackage" %>
これは、次のJSP XML要素に対応します。
<jsp:directive.page language="java" import="com.tks.ourpackage" />
次にinclude
ディレクティブの例を示します。
<%@ include file="/jsp/userinfopage.jsp" %>
これは、次のJSP XML要素に対応します。
<jsp:directive.include file="/jsp/userinfopage.jsp" />
JSPの宣言、式およびスクリプトレットに対応するJSP XML要素があります。これらの構成を対応するJSP XML要素に変換するのは簡単な作業です。次に例を示します。
次にJSPの宣言例を示します。
<%! public String func(int myint) { if (myint<0) return("..."); } %>
これは、次のJSP XML要素に対応します。
<jsp:declaration> <![CDATA[ public String func(int myint) { if (myint<0) return("..."); } ]]> </jsp:declaration>
XMLのCDATA
(文字データ)の指示が使用されているのは、宣言に「<
」文字が含まれているためです。この文字はXMLパーサーに対して特別な意味を持ちます。(JSP XMLページの作成にXMLエディタを使用すると、この文字は自動的に処理されます。)「<
」のかわりに「<
」エスケープ文字を使用して、次のように記述することもできます。
<jsp:declaration> public String func(int myint) { if (myint < 0) return("..."); } </jsp:declaration>
次にJSPの式の例を示します。
<%= (user==null) ? "" : user %>
これは、次のJSP XML要素に対応します。
<jsp:expression> (user==null) ? "" : user </jsp:expression>
次にJSPのスクリプトレットの例を示します。
<% if (pageBean.getNewName().equals("")) { %> ...
これは、次のJSP XML要素に対応します。
<jsp:scriptlet> if (pageBean.getNewName().equals("")) { </jsp:scriptlet> ...
JSPの標準アクション(jsp:include
、jsp:forward
およびjsp:useBean
など)とカスタム・アクションに対する従来の構文は、すでにXML互換です。ただし、JSP XML構文で標準アクションやカスタム・アクションを実行する場合は、次の点に注意してください。
"%=expression%"
この構文の前後には、「<
」および「>
」の山カッコがなく、expression
の前後の空白は不要であることに注意してください。XML文書の場合と同様に、規定の引用符の後にあるexpression
の値は、JSPのリクエスト時の式の場合と同じです。
<jsp:text>
要素または選択したXML要素(標準でもカスタムでもない要素)を使用して導入できます。詳細は、次項の「テンプレートおよび動的なテンプレート・コンテンツの含有」を参照してください。
JSPドキュメントに静的なテンプレート・テキストを含めるには、空白を保持しない未解析のXMLタグ、またはJSPドキュメントでテンプレート・データを示す<jsp:text>
要素を使用します。
<jsp:text>
要素を検出したOC4J JSPコンテナは、その内容を現行のJSPのout
オブジェクトに渡します(XSLTの<xsl:text>
要素の処理とほぼ同じです)。
JSP仕様では、<jsp:text>
要素が使用されている場所で、テンプレート・データ用に任意の要素(標準アクションの要素やカスタム・アクションの要素以外)を使用できます。これら任意の要素は、現行のJSPのout
オブジェクトに送信されるコンテンツを使用し、<jsp:text>
要素と同じ方法で処理されます。
次のようなJSPドキュメントのソース・テキストについて考えてみます。
<hello><jsp:declaration>String n="Alfred";</jsp:declaration> <morning> <jsp:text> Good Morning </jsp:text>${n} </morning> </hello>
このソース・テキストによって、次の内容がOC4JのJSPコンテナから出力されます。空白が保持されている点に注意してください。
<hello> <morning> Good Morning Alfred </morning></hello>
適切に構成されたXMLではないテンプレート・データの出力には、<jsp:text>
も使用できます。たとえば、もし次の${list}
EL式が<jsp:text>
タグで囲まれていなければ、JSPドキュメントでは無効となります。
<c:forEach var="list" begin="1" end="${4}"> <jsp:text>${list}</jsp:text> </c:forEach>
動的なテンプレート・コンテンツも、標準のJSPページと同様に、EL式、Javaスクリプト要素(宣言、スクリプトレットまたは式)、標準アクション・タグおよびカスタム・タグを使用してJSPドキュメントによって生成できます。
EL式を<jsp:element>
標準アクションとともにJSPドキュメントで使用すると、ハードコードせずにタグを動的に生成できます。このアクションは1つのString
属性を取り、これは生成された要素の名前として使用されます。
タグ要素には、オプションでボディを含めることができます。これは、次のもので構成されます。
<jsp:attribute>
要素
<jsp:attribute>
を使用している場合、タグ・ボディを<jsp:body>
要素内に含めることが可能
次に、JSPドキュメントのコードの例を示します。
<jsp:element name="${searchRequest.type}"> <jsp:attribute name="language">${searchRequest.language}</jsp:attribute> <jsp:body>${searchRequest.content}</jsp:body> </jsp:element>
これにより、次のものが生成されます。
<standardSearch language="English">What is an attribute?</standardSearch>
ここでは、2つのバージョン(従来の構文とXML構文)のJSPページを示します。
このサンプルのデプロイと実行の詳細は、次のWebサイトを参照してください。
http://otn.oracle.com/tech/java/oc4j/htdocs/how-to-jsp-xmlview.html
(このWebサイトを参照するには、OTNに登録する必要があります。無償で登録できます。)
従来の構文によるサンプル・ページを示します。
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %> <html> <head> <title>An eStore for all occasions</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <table align="center" width="100%" height="100%" border="4" bgcolor="#FFFFFF" bordercolor="#FF0000"> <tr> <td width="64%" valign="middle" align="center" bgcolor="#FFCCCC"> <div align="center"><img src="gifs/christmas/Electronic.gif"></div> <tags:ProductDetails occasion="Christmas" category="Cards" thBgColor="#FF3366" thFontColor="#FFFFFF"> <jsp:attribute name="normalPrice"> <td width="50%" align="center"><font
color="#CC3300"><b>${name}</b></font></td> <td width="30%" align="center"><font
color="#CC3300"><b>${price}</b></font></td> <td width="20%" align="center"><img src=${image} width="100" height="40"></td> </tr> </jsp:attribute> <jsp:attribute name="onSale"> <tr> <td width="50%" align="center"><font color="#CC3300"><b>${name}<img src="gifs/main/discount.gif"></b></font></td> <td width="30%" align="center"><font color="red"><b> <strike>Was: ${price}</strike></b></font><br><font color="#996600"><b> <font color="#CC3300">Now: ${saleprice}</font></b></font> </td> <td width="20%" align="center"><img src=${image} width="100" height="40"></td> </tr> </jsp:attribute> </tags:ProductDetails> <br><br> </td> </tr> </table> </body> </html>
同じページをXML構文で示します。ブラウザに渡されるHTMLが<jsp:text>
タグで囲まれている点に注意してください。
<html xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:tags="/WEB-INF/tags"> <jsp:directive.page contentType="text/html" /> <jsp:text> <![CDATA[ <head><title>An eStore for all occasions</title></head> <body> <table align="center" width="100%" height="100%" border="4" bgcolor="#FFFFFF"
bordercolor="#FF0000"> <tr> <td width="64%" valign="middle" align="center" bgcolor="#FFCCCC"> <div align="center"><img src="gifs/christmas/Electronic.gif"></div> ]]> </jsp:text> <tags:ProductDetails occasion="Christmas" category="Cards" thBgColor="#FF3366" thFontColor="#FFFFFF"> <jsp:attribute name="normalPrice"> <jsp:text> <![CDATA[<tr> <td width="50%" align="center"><font
color="#CC3300"><b>${name}</b></font></td> <td width="30%" align="center"><font
color="#CC3300"><b>${price}</b></font></td> <td width="20%" align="center"><img src=${image} width="100" height="40"></td> </tr>]]> </jsp:text> </jsp:attribute> <jsp:attribute name="onSale"> <jsp:text> <![CDATA[<tr> <td width="50%" align="center"><font color="#CC3300"><b>${name}<img src="gifs/main/discount.gif"></b></font></td> <td width="30%" align="center"><font color="red"><b> <strike>Was: ${price}</strike></b></font><br><font color="#996600"><b> <font color="#CC3300">Now: ${saleprice}</font></b></font> </td> <td width="20%" align="center"><img src=${image} width="100"
height="40"></td> </tr>]]> </jsp:text> </jsp:attribute> </tags:ProductDetails> <jsp:text> <![CDATA[<br><br> </td> </tr> </table> </body>]]> </jsp:text> </html>
OC4JでJSPページを変換すると、XMLビューと呼ばれる、解析結果のXMLバージョンが作成されます。JSP仕様では、XMLビューを、JSPページ(従来のページまたはJSPドキュメントのいずれか)から、そのページについての記述があるXML文書へのマッピングとして定義しています。
ページのXMLビューは、JSP XML構文を使用してユーザー自身が記述した場合のページに類似していますが、主な相違点がいくつかあります。これについて簡単に説明します。
この項には、次の項目が含まれます。
詳細は、Sun社のJSP仕様を参照してください。
JSPページを変換する場合、Webコンテナは、XMLビューを作成する際に従来のJSPページとJSP XML文書の両方に対して、次の変換を実行します。
include
ディレクティブを使用して移入したファイルをインクルードします。
jsp:id
属性(改善されたエラー・レポート用)をサポートしているWebコンテナは、その属性をページ内の各XML要素に挿入します。「妥当性チェックにおけるエラー・レポートのjsp:id属性」を参照してください。
JSPドキュメントの場合は、これらの点が、XMLビューと元のページとの主な差異の原因となります。
Webコンテナは、従来のJSPページに対して、次の追加変換を実行します。
xmlns
属性設定で、JSPバージョンの場合はversion
属性で、<jsp:root>
要素を追加します。「XML名前空間を使用したタグ・ライブラリの宣言」を参照してください。
taglib
ディレクティブを<jsp:root>
要素の追加のxmlns
属性に変換します。「XML名前空間を使用したタグ・ライブラリの宣言」を参照してください。
page
ディレクティブをJSP XML構文の対応する要素に変換します。「JSP XMLディレクティブ要素の使用」を参照してください。
<jsp:text>
要素を作成します。「テンプレートおよび動的なテンプレート・コンテンツの含有」を参照してください。
<%--
comment
--%>
)を無視します。これらのコメントはXMLビューに表示されません。
注意
DOCTYPE
文はありません。
<jsp:text>
要素のみです。
JSP仕様には、WebコンテナがXMLビューの各XML要素に追加できるjsp:id
属性についての説明があります。jsp:id
属性は、ページの妥当性チェック時にタグ・ライブラリ・バリデータ・クラスによって使用されます。この属性の目的は、改善されたエラー・レポートを提供することです。これは、(Webコンテナによるjsp:id
サポートの実装方法に従って)エラーの発生場所を開発者に正確に示すのに役立ちます。
jsp:id
属性の値は、それぞれの値またはIDが、XMLビューのすべての要素間で一意となるように、コンテナによって生成される必要があります。
タグ・ライブラリ・バリデータ・オブジェクトは、戻されたValidationMessage
オブジェクトで、これらのIDを使用できます。OC4JのJSP実装では、IDを持つValidationMessage
オブジェクトが戻されると、各IDは、一致している要素のタグ名とソース位置を反映するために変換されます。
この例では、従来のページ・ソースを示し、次に、OC4JのJSPトランスレータが生成するページのXMLビューを示します。このコードでは、Oracle JSPのバージョン番号と構成パラメータの値が表示されています。
従来のJSPページを示します。
<%@ page import="java.util.*" %> <HTML> <HEAD> <TITLE>JSP Information </TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> JSP Version:<BR> <%= application.getAttribute("oracle.jsp.versionNumber") %> <BR> JSP Init Parameters:<BR> <% for (Enumeration paraNames = config.getInitParameterNames(); paraNames.hasMoreElements() ;) { String paraName = (String)paraNames.nextElement(); %> <%=paraName%> = <%=config.getInitParameter(paraName)%> <BR> <% } %> </BODY> </HTML>
対応するXMLビューを示します。
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" jsp:id="0" version="1.2"> <jsp:text jsp:id=""><![CDATA[ <HTML> <HEAD> <TITLE>JSP Information </TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> JSP Version:<BR>]]></jsp:text> <jsp:expression jsp:id="2"> <![CDATA[ application.getAttribute("oracle.jsp.versionNumber") ]]> </jsp:expression> <jsp:text jsp:id="3"><![CDATA[ <BR> JSP Init Parameters:<BR> ]]> </jsp:text> <jsp:scriptlet jsp:id="4"><![CDATA[ for (Enumeration paraNames = config.getInitParameterNames(); paraNames.hasMoreElements() ;) { String paraName = (String)paraNames.nextElement(); ]]></jsp:scriptlet> <jsp:text jsp:id="5"><![CDATA[ ]]></jsp:text> <jsp:expression jsp:id="6"><![CDATA[paraName]]></jsp:expression> <jsp:text jsp:id="7"><![CDATA[ = ]]></jsp:text> <jsp:expression jsp:id="8"> <![CDATA[config.getInitParameter(paraName)]]> </jsp:expression> <jsp:text jsp:id="9"><![CDATA[ <BR> ]]></jsp:text> <jsp:scriptlet jsp:id="0"><![CDATA[ } ]]></jsp:scriptlet> <jsp:text jsp:id=""><![CDATA[ </BODY> </HTML> ]]></jsp:text> </jsp:root>
|
![]() Copyright © 2007 Oracle Corporation. All Rights Reserved. |
|