SAK 図書館
JAVA Servlet、JSP 基礎編14 - XML 定義取得、digester、XMLReaderFactory
■XML 定義取得
digester で XML に定義したデータ取得をテストしてみた。
使用したパッケージは、
commons-digester-1.3.zip
である。
■jar 配置
次の jar を WEB-INF/lib/ に配置した。
commons-digester.jar
この他に少なくとも commons-beanutils.jar の配置が必要であった。
既にいくつかの jar が配置済みであったため、他の依存 jar は確認
していないが、log4j に山ほど DEBUG メッセージを出力することから、
commons-logging なども必須かなと思う。
■留意点
digester の動作時に DEBUG レベルメッセージが山ほどロギングに出力され
動作スピードが著しく低下する。(^^;
何か抑制方法があるのかもしれないが、忙しくて調べられなかった。
log4j を使用しているなら、log4j.properties の log4j.rootCategory で
INFO 以上のみのロギング指定で DEBUG レベルメッセージをパスできる。
詳しくは、
JAVA Servlet、JSP 基礎編13 - ロギング、commons-logging、log4j.properties
を参照下さい。
■XML 定義取得テスト用 Servlet
parser 方法に色々あるようである。
crimson 使用パターンと FileInputStream 使用パターンを試してみた。
/*
========================================================================
xmltest1 - crimson 使用パターン
========================================================================
*/
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.digester.*;
import org.apache.crimson.parser.XMLReaderImpl;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class xmltest1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
XMLReader xmlReader = null;
XmlTestBean xmlitem = null;
try {
xmlReader = XMLReaderFactory.createXMLReader(XMLReaderImpl.class.getName());
} catch (Exception e) {
dspMsg(e.toString(), response);
return;
}
Digester dig = new Digester(xmlReader);
dig.addObjectCreate("root", XmlTestBean.class);
dig.addBeanPropertySetter("root/data1");
dig.addBeanPropertySetter("root/data2");
try {
xmlitem = (XmlTestBean)dig.parse(new File("g:/tmp/test.xml"));
} catch (Exception e) {
dspMsg(e.toString(), response);
return;
}
dspMsg(xmlitem.getData1() + "<BR>" + xmlitem.getData2(), response);
}
public void dspMsg(String msg, HttpServletResponse response) throws IOException {
response.setContentType("text/html; charset=MS932");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<P>-- xmltest1 実行結果 --</P>");
out.println("<P>" + msg + "</P>");
out.println("</BODY>");
out.println("</HTML>");
}
}
/*
========================================================================
xmltest2 - FileInputStream 使用パターン
========================================================================
*/
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.parsers.*;
import org.apache.commons.digester.*;
public class xmltest2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
SAXParserFactory factory = null;
SAXParser xmlReader = null;
XmlTestBean xmlitem = null;
try {
factory = SAXParserFactory.newInstance();
xmlReader = factory.newSAXParser();
} catch (Exception e) {
dspMsg(e.toString(), response);
return;
}
Digester dig = new Digester(xmlReader);
dig.addObjectCreate("root", XmlTestBean.class);
dig.addBeanPropertySetter("root/data1");
dig.addBeanPropertySetter("root/data2");
try {
InputStream fno = new FileInputStream("g:/tmp/test.xml");
xmlitem = (XmlTestBean)dig.parse(fno);
} catch (Exception e) {
dspMsg(e.toString(), response);
return;
}
dspMsg(xmlitem.getData1() + "<BR>" + xmlitem.getData2(), response);
}
public void dspMsg(String msg, HttpServletResponse response) throws IOException {
response.setContentType("text/html; charset=MS932");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<P>-- xmltest2 実行結果 --</P>");
out.println("<P>" + msg + "</P>");
out.println("</BODY>");
out.println("</HTML>");
}
}
■XML 定義取得テスト用 Bean
/*
========================================================================
XmlTestBean
========================================================================
*/
public class XmlTestBean {
private String data1 = "";
private String data2 = "";
public XmlTestBean() {
}
public void setData1(String str) {
data1 = str;
}
public String getData1() {
return data1;
}
public void setData2(String str) {
data2 = str;
}
public String getData2() {
return data2;
}
}
■XML 定義取得テスト用 xml
<?xml version="1.0" encoding="MS932"?>
<root>
<data1>データ1</data1>
<data2>データ2</data2>
</root>
■JAVA Servlet、JSP 基礎編資料
■JAVA Servlet、JSP + PostgreSQL 編資料
■JAVA Servlet、JSP + Oracle9i 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料