java SAX解析器是否实际从Internet上检索DTD?

时间:2012-11-30 22:04:31

标签: java xml struts2 sax dtd

使用声明DOCTYPE的XML文件,以struts.xml文件为例:

Java SAX处理实际上是从提供的URL获取dtd吗?

3 个答案:

答案 0 :(得分:4)

许多(大多数)实现,即使在技术上,如果我没记错的话,该位置应被解释为URI,而不是URL。

如果您想确保在本地解析它,请查看EntityResolver界面。

答案 1 :(得分:3)

根据Xerces documentation,解析器可能会在启用验证时尝试从互联网下载文件。但我真的认为这可以从解析器更改为解析器,因为库可能决定使用本地缓存,代理服务器等等。

答案 2 :(得分:0)

您可以修改struts.xml以从类路径加载struts2核心jar中的DTD文件,而不是从Internet加载

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts 
Configuration//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

改变

<!DOCTYPE struts SYSTEM "struts-2.0.dtd">

现在,sax解析器从我放置的/ src文件夹中加载了struts-2.0.dtd文件。

这也是我修改过的hibernate配置文件,它的工作方式略有不同。它直接从JAR加载dtd文件,不必将其物理地放在src文件夹中

<!DOCTYPE hibernate-configuration SYSTEM "classpath://org/hibernate/hibernate-configuration-3.0.dtd">