Web コンポーネントからの XML の生成

Web コンポーネントには柔軟性があるため、JSP およびサーブレットを使用して XML データの生成、利用、または変換を行うことができます。 このセクションでは、Web コンポーネントから XML を生成する方法について説明します。

JSP からの XML の生成

JSP から XML を生成するには、page ディレクティブの contentType 属性を text/xml に設定します。次のサンプルは、JSP で contentTypetext/xml に設定する方法を示しています。

<%@ page contentType="text/xml" %>
<?xml version="1.0" encoding="UTF-8"?>
 <movie name="猿の惑星">
  <actor>
   <f_name>Charleton</f_name>
   <l_name>Heston</l_name>
   <quote>猿なんか嫌いだ</quote>
  </actor>
  <rating body="MPAA">R</rating>
 </movie>

サンプルの JSP を表示するには、samples JRun サーバを起動し、ブラウザで
http://localhost:8200/techniques を開きます。

JSP から XML を生成すると、コンポーネントで XSLT を使用することによって、そのページコンテンツを変換したり、SAX/DOM を使用して XML をサーバサイドオブジェクトに変換し、そのページのプロパティを抽出したりすることができます。

XML をサポートしているブラウザ (Microsoft の Internet Explorer など) で前のサンプルコードを呼び出すと、次のように表示されます。

これは、Internet Explorer 画面に表示された、XML の展開可能なツリービューです。

メモ:  XML シンタックスでは、<?xml version="1.0" encoding="UTF-8"?> の前に空白や改行を配置することは許されていませんが、Internet Explorer ではそれが許されています。その他のブラウザでは許されていない可能性があります。

データソースを繰り返し入力しながら適切な場所に HTML に似たタグを挿入することによって、JSP のデータから XML をダイナミックに生成することもできます。

次のサンプルコードは、Samples データソースの movies テーブルのデータを XML 形式に送信する方法を示しています。

<%@ page contentType="text/xml" %> 
<%@ page import="java.sql.*,javax.naming.*,javax.sql.*" %>
<%
 String sqlstmt="SELECT movie FROM movies";    
 String dsName="Samples";
 InitialContext ctx=new InitialContext();    
 DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/" + dsName); 
 Connection myConn=ds.getConnection();    
 Statement myStmt=myConn.createStatement();    
 ResultSet myRs=myStmt.executeQuery(sqlstmt); 
%>
<?xml version="1.0" encoding="UTF-8"?>
<document>
<% while (myRs.next()) { %>
 <movie><%=myRs.getString("movie") %></movie>
 <rating><%=myRs.getString("rating") %></rating>
<% } %>
</document>

前のサンプルコードよって、次のような出力が生成されます。

<document>
  <movie>猿の惑星</movie>
  <rating>R</rating>
</document>

JSP は、前のサンプルコードで使用した従来の JSP シンタックスだけでなく、JSP XML シンタックスでも記述できます。詳細については、 「XML での JSP の記述」 を参照してください。

サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。

サーブレットからの XML の生成

サーブレットでは、JSP と同様の方法で XML を生成します。大きな違いは、
setContentTypetext/xml に設定するために、page ディレクティブではなく、HttpServletResponse オブジェクトの setContentType メソッドを使用するという点です。また、XML 要素に使用する引用符文字もエスケープ処理する必要があります。

getWriter を呼び出す前に setContentType を呼び出す必要があります。
この setContentType メソッド呼び出しでエンコードを設定できます。次のサンプルのように println ステートメントを使用すると、サーブレットから XML データを抽出できます。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MovieServlet extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse 
response) throws IOException, ServletException {
  response.setContentType("text/xml;charset=UTF-8");
  PrintWriter out = response.getWriter();
  out.println("<?xml version=¥"1.0¥" encoding=¥"UTF-8¥"?>");
  out.println("<movie name=¥"猿の惑星¥">");
  out.println("<actor><f_name>Charleton</f_name>");
  out.println("<l_name>Heston</l_name>");
  out.println("<quote>猿なんか嫌いだ</quote>");
  out.println("</actor><rating body=¥"MPAA¥">R</rating></movie>");
 }
}

Web ブラウザに出力される結果は、 「JSP からの XML の生成」 で説明した JSP サンプルで生成されたものと同じです。コンテンツタイプが text/xml の HTML タグだけを含むページをエクスポートすることもできます。ただし、この場合は形式の整った HTML を記述する必要があります。つまり、<P><BR> タグにもすべて終了タグを付けて XML バリデーションエラーの発生を避ける必要があります。

サンプルサーブレットを表示するには、samples JRun サーバを起動し、ブラウザで http://localhost:8200/techniques を開きます。