Java和XML是黄金组合,网上已经有很多文章介绍,XML作为电子商务中数据交换,已经有其不可替代的作用,但是在平时系统开发中,我们不一定都用到数据交换,是不是无法使用XML了?

Java和XML是黄金组合,网上现已有许多文章介绍,XML作为电子商务中数据交换,现已有其不行替代的效果,可是在平常体系开发中,咱们纷歧定都用到数据交换,是不是无法运用XML了?

J2EE中XML配置文件的读取处理(java xml配置文件读取)  J2EE XML XML配置文件 第1张

当然不是,现在现已有一个新趋势,Java程序的装备文件都开端运用XML格局,曾经是运用相似Windows的INI格局(Java中也有Propertiesy这样的类专门处理这样的特点装备文件)。运用XML作为Java的装备文件有许多优点,从Tomcat的装置装备文件和J2EE的装备文件中,咱们现已看到XML的遍及运用,让咱们也跟从盛行趋势用XML装备起来。

现在关键是怎么读取XML装备文件?有好几种XML解析器:首要有DOM和SAX,在Apache的XML项目组中,现在有Xerces Xalan Cocoon几个开发XML相关技能的project.Tomcat自身运用的是Sun的JAXP,而其XSL Taglib project中运用Xerces解析器。

好了,上面都是比较烦人的理论问题,仍是从速切入XML的装备文件的读取吧。

在咱们的程序中,一般要有一些依据主机环境确认的变量。比方数据库拜访用户名和暗码,不同的主机或许设置纷歧样。只需更改XML装备文件,就能够正常运转。

﹤myenv﹥
﹤datasource﹥
﹤dbhost﹥localhost﹤/dbhost﹥
﹤dbname﹥sqlname﹤/dbname﹥
﹤dbuser﹥username﹤/dbuser﹥
﹤dbpassword﹥password﹤/dbpassword﹥
﹤/datasource﹥
﹤/myenv﹥ 

上面这个myenv.XML装备文件一般是放在tomcat的WEB-INF/classes目录下。

咱们编制一个Java程序直接读取,将dbhost dbuser dbpassword提取出来供其他程序拜访数据库用。

现在运用SAX比较的多,与DOM首要区别是SAX是一行一行读取XML文件进行剖析,合适比较大文件,DOM是一次性读入内存,明显不能抵挡大文件。这儿咱们运用SAX解析,因为SAX解析器不断在开展,网上有不少文章是针对老版别的。假如你运用JDK1.4 ,能够参阅 运用SAX处理XML文档 一文。这儿的程序是依据其改善而且通过实践调试得来的。

对上面myenv.xml读取的Java程序:

import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException; 
import java.util.Properties;
//运用DefaultHandler的优点
是不用陈列出一切办法,
public class ConfigParser 
extends DefaultHandler
{
////界说一个Properties 用来寄存
dbhost dbuser dbpassword的值
private Properties props;
private String currentSet;
private String currentName;
private StringBuffer 
currentValue = new StringBuffer();
//构建器初始化props
public ConfigParser()
{
this.props = new Properties();
}
public Properties getProps()
{
return this.props;
}
//界说开端解析元素的办法。 
这儿是将﹤xxx﹥中的称号xxx提取出来。
public void startElement
(String uri, String localName,
String qName, Attributes attributes) 
throws SAXException
{
currentValue.delete(0, currentValue.length());
this.currentName =qName;
}
//这儿是将﹤xxx﹥﹤/xxx﹥之间
的值加入到currentValue
public void characters(char[] ch,
int start, int length) throws SAXException
{
currentValue.append
(ch, start, length);
}
//在遇到﹤/xxx﹥完毕后,
将之前的称号和值一一对应保存在props中
public void endElement(String uri,
String localName, String qName)
throws SAXException 
{
props.put(qName.toLowerCase(), 
currentValue.toString().trim());
}
} 

上面的这个解析程序比较简略吧? 其实解析XML便是这么简略。

现在咱们现已将dbhost dbuser dbpassword的值localhost sqlname username password提取了出来。可是这只是在在解析器内部,咱们的程序还不能拜访。需求再编制一个程序。

import java.util.Properties;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.net.URL;
public class ParseXML
{
//界说一个Properties 
用来寄存 dbhost dbuser dbpassword的值
private Properties props;
//这儿的props
public Properties getProps()
{
return this.props;
}
public void parse(String filename)
throws Exception {
//将咱们的解析器目标化
ConfigParser handler = new ConfigParser();
//获取SAX工厂目标
SAXParserFactory factory
= SAXParserFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
//获取SAX解析
SAXParser parser
= factory.newSAXParser();
//得到装备文件myenv.xml地点目录。
tomcat中是在WEB-INF/classes
//下例中BeansConstants是用来
寄存xml文件中装备信息的类,
能够自己替代或界说
URL confURL = BeansConstants.class.
getClassLoader().getResource(filename);
try
{
//将解析器和解析目标myenv.xml联系起来,
开端解析 
parser.parse(confURL.toString(), handler); 
//获取解析成功后的特点 
今后咱们其他运用程序只需调用本程序
的props就能够提取出特点称号和值了
props = handler.getProps();
}finally{
factory=null;
parser=null;
handler=null;
}
}
}

因为咱们的XML文件是运用最简略的方式,因而解析器相对简略,可是这现已满足抵挡咱们的装备文件了。

判别一个程序体系的先进性,咱们先看看他的装备文件,假如还在运用老套的xxx=123这样相似.ini的文件,咱们或许会微微一笑,他又掉队了.....

【修改引荐】

  1. J2EE中的Config与Context参数运用
  2. J2EE常见的四种架构类型
  3. 当时盛行的J2EE WEB运用架构剖析
转载请说明出处
知优网 » J2EE中XML配置文件的读取处理(java xml配置文件读取)

发表评论

您需要后才能发表评论