ヘッダーをスキップ

Oracle Containers for J2EE JavaServer Pages開発者ガイド
10g(10.1.3.1.0)

B31860-01
目次
目次
索引
索引

戻る 次へ

8 OC4JにおけるJSP XMLサポート

JavaServer Pagesテクノロジは、XML文書の作成に効果的なモデルであるとの認識が高まっています。JSP 2.0でリリースされた、XML構文の改善を含めた新しい拡張機能によって、JSPテクノロジはXMLテクノロジをさらに補完するものとなり、XMLツールへのアクセスもより容易になりました。

OC4J JSPコンテナは、JavaServer Pages 2.0仕様で説明されているJavaServer PagesによるXMLのサポートを完全に実装しています。これには、次のサポートが含まれます。

この章には、次の各項が含まれます。

カスタム・タグを介してOC4Jで提供されるXMLとXSLのJSPサポートの詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。

XMLに関する一般情報は、次のWebサイトでXML仕様を参照してください。

http://www.w3.org/XML/

JSPドキュメントとXMLビューの概要

JSPドキュメントという用語は、XML構文で作成されたJSPページを指します。JSPドキュメントは、純粋なXML構文内で適切に構成されており、名前空間を識別します。JSPドキュメントでは、JSP XMLコア構文および使用する標準アクション・タグおよびカスタム・タグ・ライブラリの構文を指定するために、XML名前空間が使用されます。対照的に、従来のJSPページは通常、XML文書ではありません。

JSPドキュメントには、次のような利点があります。

標準アクション・タグやカスタム・タグなどの多くのJSP構文の要素は、すでにXML構文で作成されています。互換性のないJSP要素に対しては、対応するXML要素が提供されています。詳細は、「JSPドキュメントの使用」を参照してください。

OC4JのJSPコンテナは、次のいずれかを検出すると、そのファイルをJSPドキュメントとして識別します。

JSPドキュメントに対するセマンティック・モデルは従来のページと同様です。JSPドキュメントは、対応する構文を使用した従来のページと同じ一連の操作と結果を指示します。空白の処理はXSLT規則に従います。JSPドキュメントのノードが識別されると、空白のみのテキスト・ノードは、テンプレート・データ用の<jsp:text>要素内である場合を除き、文書から削除されます。<jsp:text>要素の内容は、そのまま保持されます。


注意

テンプレート・データは、JSPトランスレータでは解析できないテキストで構成されています。 


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ドキュメントの使用

ここでは、JSPドキュメントの構文について、より詳しく説明します。全体の解説は、Sun社のJSP仕様を参照してください。


重要

JSPの従来の構文とJSP XML構文を1つのファイルに混在させることはできません。ただし、includeディレクティブを使用すると、1つの変換単位で両方の構文を使用できます。たとえば、従来のJSPページにJSPドキュメントを含めることができます。 


JSP XML構文には、次の要素を含めることができます。この構文には、<%-- comment --%>以外のすべてのJSP要素について、XMLの対応する要素または置換要素が含まれています。

前述のとおり、標準のJSP構文の大半はすでにXML互換のため、XML要素形式でJSPドキュメント内で使用できます。互換性のないJSP要素に対しては、次の表8-1で示すとおり、対応するXML要素のセットが提供されています。

表8-1    標準のJSP構文とXML構文 
構文要素  JSP構文  XML構文 

コメント 

<%--.. --%>  

<!-- .. -->  

宣言 

<%! ..%> 

<jsp:declaration> ..</jsp:declaration> 

includeディレクティブ 

<%@ include .. %>  

<jsp:directive.include .. /> 

pageディレクティブ 

<%@ page .. %> 

<jsp:directive.page .. /> 

タグ・ライブラリ・ディレクティブ 

<%@ taglib .. %> 

xmlns:prefix="tag library URL" 

式 

<%= .. %> 

<jsp:expression> ..</jsp:expression> 

スクリプトレット 

<% .. %> 

<jsp:scriplet> ..</jsp:scriplet> 

ドキュメントのルート要素の指定

JSPドキュメントにはルート要素が必要です。JSP 2.0より前のリリースでは、<jsp:root>要素をルートとして使用する必要がありました。この要素はまだ使用できますが、必須ではなくなりました。したがって、ユーザーが自分でルート要素を指定できます。この柔軟性により、任意のXML文書をJSPドキュメントとして使用することが可能になります。

後述のドキュメントの例では、ルート要素はhtmlです。また、次の項で説明するとおり、ルート内で、ドキュメントで使用するタグ・ライブラリを宣言できます。

JSPドキュメントおよびそのリクエスト出力には、XML宣言を含める必要はありません。それどころか、JSPドキュメントがXML出力を生成しない場合、ドキュメントに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はアプリケーション相対パスを示し、次のいずれかの形式を使用する必要があります。

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>

JSP XMLディレクティブ要素の使用

pageディレクティブとincludeディレクティブに対応するJSP XML要素があります。pageディレクティブまたはincludeディレクティブを、対応するJSP XML要素に変換するのは簡単な作業です。次に例を示します。

例: pageディレクティブ

次にpageディレクティブの例を示します。

<%@ page language="java"
    import="com.tks.ourpackage" %>

これは、次のJSP XML要素に対応します。

<jsp:directive.page language="java"
    import="com.tks.ourpackage" />

例: includeディレクティブ

次にincludeディレクティブの例を示します。

<%@ include file="/jsp/userinfopage.jsp" %>

これは、次のJSP XML要素に対応します。

<jsp:directive.include file="/jsp/userinfopage.jsp" />


注意

ページのXMLビューには、include要素がありません。これは、静的にインクルードされたセグメントはビューに直接コピーされるためです。 


JSP XMLの宣言要素、式要素およびスクリプトレット要素の使用

JSPの宣言、式およびスクリプトレットに対応するJSP XML要素があります。これらの構成を対応するJSP XML要素に変換するのは簡単な作業です。次に例を示します。

例: JSPの宣言

次に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エディタを使用すると、この文字は自動的に処理されます。)「<」のかわりに「&lt;」エスケープ文字を使用して、次のように記述することもできます。

<jsp:declaration> 
   public String func(int myint) { if (myint &lt; 0) return("..."); }
</jsp:declaration>

例: JSPの式

次にJSPの式の例を示します。

<%= (user==null) ? "" : user %>

これは、次のJSP XML要素に対応します。

<jsp:expression> (user==null) ? "" : user </jsp:expression>

例: JSPのスクリプトレット

次にJSPのスクリプトレットの例を示します。

<% if (pageBean.getNewName().equals("")) { %>
   ...

これは、次のJSP XML要素に対応します。

<jsp:scriptlet> if (pageBean.getNewName().equals("")) { </jsp:scriptlet>
   ...

JSP XMLの標準アクションとカスタム・アクションの要素の使用

JSPの標準アクション(jsp:includejsp:forwardおよびjsp:useBeanなど)とカスタム・アクションに対する従来の構文は、すでにXML互換です。ただし、JSP 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ドキュメントのコードの例を示します。

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

比較サンプル: 従来のJSPページとJSP XML文書との比較

ここでは、2つのバージョン(従来の構文とXML構文)のJSPページを示します。

このサンプルのデプロイと実行の詳細は、次のWebサイトを参照してください。

http://otn.oracle.com/tech/java/oc4j/htdocs/how-to-jsp-xmlview.html

(このWebサイトを参照するには、OTNに登録する必要があります。無償で登録できます。)

従来のJSPページのサンプル

従来の構文によるサンプル・ページを示します。

<%@ 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>

JSPドキュメントのサンプル

同じページを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>

JSP XMLビューについて

OC4JでJSPページを変換すると、XMLビューと呼ばれる、解析結果のXMLバージョンが作成されます。JSP仕様では、XMLビューを、JSPページ(従来のページまたはJSPドキュメントのいずれか)から、そのページについての記述があるXML文書へのマッピングとして定義しています。

ページのXMLビューは、JSP XML構文を使用してユーザー自身が記述した場合のページに類似していますが、主な相違点がいくつかあります。これについて簡単に説明します。

この項には、次の項目が含まれます。

詳細は、Sun社のJSP仕様を参照してください。

JSPページからXMLビューへの変換

JSPページを変換する場合、Webコンテナは、XMLビューを作成する際に従来のJSPページとJSP XML文書の両方に対して、次の変換を実行します。

JSPドキュメントの場合は、これらの点が、XMLビューと元のページとの主な差異の原因となります。

Webコンテナは、従来のJSPページに対して、次の追加変換を実行します。

妥当性チェックにおけるエラー・レポートのjsp:id属性

JSP仕様には、WebコンテナがXMLビューの各XML要素に追加できるjsp:id属性についての説明があります。jsp:id属性は、ページの妥当性チェック時にタグ・ライブラリ・バリデータ・クラスによって使用されます。この属性の目的は、改善されたエラー・レポートを提供することです。これは、(Webコンテナによるjsp:idサポートの実装方法に従って)エラーの発生場所を開発者に正確に示すのに役立ちます。

jsp:id属性の値は、それぞれの値またはIDが、XMLビューのすべての要素間で一意となるように、コンテナによって生成される必要があります。

タグ・ライブラリ・バリデータ・オブジェクトは、戻されたValidationMessageオブジェクトで、これらのIDを使用できます。OC4JのJSP実装では、IDを持つValidationMessageオブジェクトが戻されると、各IDは、一致している要素のタグ名とソース位置を反映するために変換されます。

例: 従来のJSPページからXMLビューへの変換

この例では、従来のページ・ソースを示し、次に、OC4JのJSPトランスレータが生成するページのXMLビューを示します。このコードでは、Oracle JSPのバージョン番号と構成パラメータの値が表示されています。

従来の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> 

JSPページのXMLビュー

対応する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>

戻る 次へ
Oracle
Copyright © 2007 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引