新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 计算机科学论坛计算机技术与应用『 Java/Eclipse 』 → XML和JSP交互技术(上) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 14580 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: XML和JSP交互技术(上) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     hsower 帅哥哟,离线,有人找我吗?狮子座1983-8-21
      
      
      威望:7
      等级:大四寒假(收到IBM的Offer啦)
      文章:72
      积分:1606
      门派:XML.ORG.CN
      注册:2004/4/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hsower发送一个短消息 把hsower加入好友 查看hsower的个人资料 搜索hsower在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hsower的博客楼主
    发贴心情 XML和JSP交互技术(上)

    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 op

        }

    参数name代表XML节点名字,这个方法抛出一个违例org.xml.sax.SAXException

      从上面我们也可以看出,三个方法在XML事件处理中的顺序依次为:

       startElement()àcharacters()àendElement(String name)

    也许还不好理解,不要紧在下面我们将会写一个类myHandler类实现HandlerBase接口,并且覆盖这三个主要的方法来实现我们的XML文件读取操作。

      3)关于哈希表  

      由于程序用到了哈希表,所以在这里先简单的介绍一下哈希表的基本语法以便大家能更好的理解下面的程序。

      哈希表HashTable是从Dictionary派生出来的,里面具有一系列的关键字和数值,一个关键字对应一个数值,识别主要是通过对象的哈希代码hashCode识别。

      我们程序中用到的方法如下:

      put(Object key,Object value)添加一对关键字/数值到哈希表中

      get(Object key)根据关键字得到它的值

      keys()取得所有关键字并返回一个集合Enumeration

    此外,哈希表还具有其他很多有用的方法如长度size()、是否为空empty()、是否重复containsKey()等等,限于篇幅在这里就不进行介绍了。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/19 14:18:00
     
     xmzhy 帅哥哟,离线,有人找我吗?狮子座1978-8-18
      
      
      威望:5
      等级:计算机学士学位
      文章:385
      积分:2003
      门派:XML.ORG.CN
      注册:2003/10/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xmzhy发送一个短消息 把xmzhy加入好友 查看xmzhy的个人资料 搜索xmzhy在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xmzhy的博客2
    发贴心情 
    good
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/5/10 9:08:00
     
     mifeng 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:59
      门派:XML.ORG.CN
      注册:2004/10/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给mifeng发送一个短消息 把mifeng加入好友 查看mifeng的个人资料 搜索mifeng在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看mifeng的博客3
    发贴心情 
    不要紧在下面我们将会写一个类myHandler类实现HandlerBase接口,

    怎么没有呀?〉

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/6/1 11:16:00
     
     luyimei 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:3
      积分:67
      门派:XML.ORG.CN
      注册:2005/6/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给luyimei发送一个短消息 把luyimei加入好友 查看luyimei的个人资料 搜索luyimei在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看luyimei的博客4
    发贴心情 谢谢了!下集何时出来?
    谢谢了!下集何时出来?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/6/18 19:36:00
     
     jcxuefeng 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:79
      积分:378
      门派:XML.ORG.CN
      注册:2005/9/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jcxuefeng发送一个短消息 把jcxuefeng加入好友 查看jcxuefeng的个人资料 搜索jcxuefeng在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jcxuefeng的博客5
    发贴心情 
    谢谢了!不过后面的什么时候可以看到?很着急哦!

    ----------------------------------------------
    学会对别人说NO~

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/9/20 10:18:00
     
     lywzd 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(C++考了100分!)
      文章:69
      积分:324
      门派:XML.ORG.CN
      注册:2005/10/31

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给lywzd发送一个短消息 把lywzd加入好友 查看lywzd的个人资料 搜索lywzd在『 Java/Eclipse 』的所有贴子 点击这里发送电邮给lywzd 引用回复这个贴子 回复这个贴子 查看lywzd的博客6
    发贴心情 
    好象里面的例子有点问题啊,是不全面,还是???忽略了?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/1 10:58:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 点击这里发送电邮给Google AdSense 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/23 3:15:20

    本主题贴数6,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    79.102ms