SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK