日期:2014-03-11 浏览次数:20922 次
XML和JSP都是近两年才出现的技术,目前曾经成为了很多程序员的热点话题。XML(可扩展的标记言语)是用来定义文档标记言语的框架,次要用来存储和发送数据信息,以便各种基于WEB的使用之间能更方便的交换数据。而Jsp是服务器端程序动态设计言语,可以用来设计服务器端各种程序如B2B、B2C等各种系统,由于其面向对象、编译执行、健壮等特性,也得到了越来越多的使用。
一个很实用的技术就是如何将XML和JSP结合起来,所幸的是我们不用去写底支持层东西了,由于很多厂商如SUN、IBM等都发布了本人的支持XML的API,其中SUN公司提供了一个支持在Java下使用XML的API-JAXP(JAVATM API for XML Processing Optional Package),这部分API提供了基本的读写、操作XML文档的功用,通过它我们可以很方便的将XML集成到Java使用程序中来。
目前JAXP的版本是1.1,除了基本XML支持外还支持SAX 2.0 、DOM 2和XSL技术。SUN公司提供的JAXP可以在SUN公司的主页http://java.sun.com/xml 下载。
一、 JAXP的安装
1、安装前请确认您用的是JDK 1.1.8 以上版本的Java环境。
2、在http://java.sun.com/xml 下载JAXP1.1的zip版本,解压到硬盘中,假定解压目录为#JAXP11,解压后发现有三个jar文件jaxp.jar crimson.jar xalan.jar,这就是JAXP的核心了。
3、修正系统的CLASSPATH变量,在Windows平台下添加这样一行:
#JAXP11\jaxp.jar; #JAXP11\crimson.jar; #JAXP11\xalan.jar
在Unix/Linux系统下添加下面一行:
#JAXP11/jaxp.jar: #JAXP11/crimson.jar: #JAXP11/xalan.jar alan.jar
如果你使用的是Java2的话,有一种更简单的方法,将上面的三个文件直接拷贝到JDK的Lib扩展目录中去,如#JAVA_HOME/jre/lib/ext(#JAVA_HOME代表JDK目录),这样就不用修正CLASSPATH了。
4、好了,安装完成了,下一步就是编写程序然后运转了。
二、 简单的XML例子
XML (EXtensible Markup Language )是一品种似HTML的言语,和HTML不同,XML次要用来描述结构化数据,通过XML格式我们可以很方便的在各种使用程序之间交换数据,而这些都是传统技术需求花费很大精力才能做到的。
让我们来看一个简单的XML文档例子,这个例子保存了部分团体档案,请将它保存为personal.xml文件,由于后面我们的Jsp文件还会调用它两头的数据。
<团体档案>
<姓名>刘玉锋
<性别>男
<年龄>24
coolknight@263.net
<团体主页>http://www.21jsp.com
<引见>欢迎大家访问我的主页!
是不是很类似于HTML文件,如HTML中的元素"你好"等等,由于XML和HTML一样都是标准SGML的子集合,所以有类似之处。但也有很多不同之处需求留意,比如XML文件必须有成对地标记而且大小写敏感,而这些在HTML中都是默认允许的。
第一行是必须的XML声明, 我们可以看到声明是在之间的,两头可以定义部分属性,version="1.0"表示文档将使用XML1.0的规范,encoding="gb2312"表示采用中文字符集,这样我们在下面对于数据就可以使用中文了。
接着就是<团体档案>标记了,这是XML文件中的根元素,也是不可缺少的,而且必须有一个对应的结束标记,在开始和结束标记之间我们就可以定义本人的数据描述了。
嵌套在<团体档案>标记如"<姓名>刘玉锋"就是具体的数据描述了,同根元素一样必须是成对的标记,在标记两头可以是标记对应具体的数值。这种表示方法有点类似于数据库中的记录了,字段名字为"姓名"、"性别"等,上面的XML文件就相当于一个只要一条记录的表"团体档案"。当然在XML文件中可以进行多层嵌套,但这就不在本文的讨论范围了。
当然,这里只是一个特别简单能代表XML的例子,XML的相关内容特别多,如果想更多了解XML的话建议还是看相关的书籍。
三、JSP和XML交互
前面曾经说过了,Jsp通过SUN公司的API-JAXP可以实现和XML的交互,那么具体实现次要有两种方法,一种是采用DOM2 API,另外一种是采用SAX2 API。
在这里我们次要讨论JAXP中的SAX(Simple API for XML Parsing)技术,DOM2技术可以看SUN公司相关的文档。
1)关于SAX模型
SAX模型是一种处理XML文件的方法,它是事件驱动的,有些类似于AWT中的事件驱动机制,通过事件驱动来识别XML文档的内容。在API中关于SAX的次要有下面的几个包:
oorg.xml.sax
oorg.xml.sax.helpers
oorg.xml.sax.ext
在前台的Java程序或者是Jsp程序中通过调用这几个包中的API就可以很好地实现Java和XML的交互。
2)关于HandlerBase接口
我们知道在AWT中普通是通过实施ActionListener等接口实现事件的处理的,同样的在SAX中SUN也提供了一个类似的接口HandlerBase来处理XML解析的功用,通过将HandlerBase和XML文件关联可以很好的来处理XML文件。
在实施接口中我们次要重载三个HandlerBase的方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int length)、endElement(String name)。
startElement()在读取一行XML数据的开始标记时候触发,子类必须覆盖这个方法,这样就可以在处理XML节点前先进行本人的处理(比如开始读取或者写入XML文件中的节点时候)。
public void startElement (String name, AttributeList attributes)
throws SAXException
{
// no op
}
参数name代表XML节点名字,attributes代表默认或者特殊的属性,这个方法抛出一个违例org.xml.sax.SAXException。
characters()方法次要用来处理和之间具体的数据,在处理节点数据时候触发,我们可以覆盖这个方法来进行数据操作的处理,可以添加代码读取节点数据值或者是写入节点数据值。
public void characters (char ch[], int start, int length)
throws SAXException
{
// no op
}
参数ch[]代表一个字符数组,start代表字符数组的开始位置,length代表要取的字符数组中ch[]中的元素个数,同样的这个方法抛出一个违例org.xml.sax.SAXException。
endElement()方法在处理节点元素结束的时候触发,也就是碰到标记的时候,我们可以覆盖这个方法来进行数据的收尾任务,比如将节点数据写入到文件中。
public void endElement (String name)
throws SAXException
{
// no o