Tomcat5.0以及JDK1.5+中关于xml解析的jar包

     我们知道在tomcat5.0.*的目录common\endorsed下有两个jar包,xercesImpl.jar和xmlParserAPIs.jar(Dom Level2),以前只是知道这两个jar包的作用是xml解析用的,至于为什么会用这两个jar包?以及为什么会放在这个目录下,一直没太弄明白。
1.为什么tomcat会额外带有这两个jar包呢?
   jdk1.4.*中已经包含了xml解析相关的接口和实现,为什么tomcat还会带有这两个jar包,岂不是多此一举,实际上是

   因为jdk自带的xml解析的实现有些bug,可以到SDN 中以关键字xml jdk1.4 搜索一下。所以tomcat会带这两个jar包。
2.那为什么这两个jar包会放在这个目录呢?
   一般来说,tomcat加载jar的顺序是:jdk的jar包-->tomcat的jar包-->应用的jar包。
   在jdk1.4.*定义了一个覆盖的机制(Endorsed Standards Override Mechanism ),即可以优先于jdk的jar包,而

   先加载某些jar包,这个是通过参数-Djava.endorsed.dirs来定义的。

   在tomcat的catalina.bat中定义的为:  -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" ,

   而变量JAVA_ENDORSED_DIRS在setclasspath.bat中定义的:

   set JAVA_ENDORSED_DIRS=%BASEDIR%\common\endorsed,  即tomcat的endorsed目录,

   它优先于jdk中自带的xml的解析的包。

       解释了这两个问题,然后再解释一下为什么在使用tomcat5.0.*+jdk1.5+时,如果用到了w3c定义的xml解析的包,为什么需要删除endorsed下那两个jar包了 ,是因为jdk1.5+中自带的xml解析的包是基于Dom Level 3,如果不删除在运行时会报 method isSameNode not found ,getTextContent not found类似的错误,isSameNode是DomLevel3的接口中定义的方法,而tomcat优先加载的是endorsed目录的xml解析的jar包,当然没有这个方法,所以需要将其去掉。

     在tomcat5.5.×没以上问题,是因为它使用的是jdk1.5自带的xml解析的jar包,而且它必须得用jdk1.5+

 

你可能感兴趣的:(jdk,tomcat,xml)