昨天有人碰到这样一个问题,struts2程序以前本身跑得好好的,但后来运行出问题,说无法读取struts2.0-dtd之类的。
其实这个问题,在SSH项目中大家可能有时遇到。从字面意思来看,把web项目部署到服务器上后,dom4j解析xml文件,找不到 struts2.0-dtd之类的文件。
从深层次分析,其实应该是你自己xml的dtd格式写的不对,因为按照struts,spring以及hibernate的运行机制,只要你按照官方文档写dtd格式,就不会出现这个问题。系统会自动在classpath路径下的某个路径下寻找相应的dtd文件,如果找不到,才到指定的url网站上找。
比如struts2.3.4 为例,我们用rar压缩工具打开struts2-core-2.3.4.1.jar包,就会发现有多个struts dtd文件。比如struts-2.1.7.dtd ,struts-2.0.dtd,我们选择struts-2.1.7.dtd来说。
打开struts-2.1.7.dtd文件,我们可以再注释的地方可以看到这样一句话
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
其实这个就是你需要在struts.xml里配置dtd格式。
以hibernate3.5.5为例,我们打开hibernate3.jar包可以发现,在org.hibernate里面有hibernate-mapping-3.0.dtd这个文件,这个文件开头有介绍
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">