Web コンポーネントには柔軟性があるため、JSP およびサーブレットを使用して XML データの生成、利用、または変換を行うことができます。 このセクションでは、Web コンポーネントから XML を生成する方法について説明します。
JSP から XML を生成するには、page
ディレクティブの contentType
属性を text/xml
に設定します。次のサンプルは、JSP で contentType
を text/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 など) で前のサンプルコードを呼び出すと、次のように表示されます。
メモ: 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 を開きます。
サーブレットでは、JSP と同様の方法で XML を生成します。大きな違いは、setContentType
を text/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 を開きます。