【发布时间】:2018-03-14 16:26:21
【问题描述】:
对于声明 DOCTYPE 的 XML 文件,以 struts.xml 文件为例:
Java SAX 处理是否真的从提供的 URL 获取 dtd?
【问题讨论】:
对于声明 DOCTYPE 的 XML 文件,以 struts.xml 文件为例:
Java SAX 处理是否真的从提供的 URL 获取 dtd?
【问题讨论】:
即使从技术上讲,如果我没记错的话,许多(大多数)实现都会将位置解释为 URI,而不是 URL。
如果您想确保在本地解决它,请查看EntityResolver 接口。
【讨论】:
基于Xerces documentation,当验证开启时,解析器可能会尝试从互联网下载文件。但我真的认为这可以从解析器更改为解析器,因为库可能会决定使用本地缓存、代理服务器或其他任何东西。
【讨论】:
您可以修改 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 文件。
这也是我修改后的休眠配置文件,它的工作方式略有不同。它直接从 JAR 加载 dtd 文件,不必将其物理放置在 src 文件夹中
<!DOCTYPE hibernate-configuration SYSTEM "classpath://org/hibernate/hibernate-configuration-3.0.dtd">
【讨论】: