引用Servlet中的文件

时间:2011-07-31 13:27:50

标签: java xml servlets path

当我在代码中引用DTD文件时,我不知道如何在我的项目文件夹中引用它。例如:如果我的项目名称是Moo,我想在/Moo/WEB-INF/courses.dtd引用DTD。

TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = null;  

try { trans = transfac.newTransformer();   }
catch (TransformerConfigurationException e) { }

trans.setOutputProperty(OutputKeys.INDENT, "yes");  
trans.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "/Moo/WEB-INF/courses.dtd");

但它找不到它。我该如何参考呢?

我使用getRealPath问题提供了一个解决方案,因为我的项目将被视为.war文件,这不是好事。我该怎么办?

3 个答案:

答案 0 :(得分:2)

首先,不要包括“Moo”。对于servlet,root是WEB-INF的一级。 不确定OutputKeys.DOCTYPE_SYSTEM是否需要相对路径。绝对路径是:

String path = getServletContext().getRealPath("/WEB-INF/courses.dtd");

答案 1 :(得分:1)

因此,您正在使用XSLT生成XML文档。您希望文档缩进(OutputKeys.INDENT, "yes"),并且您希望它包含带有SYSTEM引用的DOCTYPE(OutputKeys.DOCTYPE_SYSTEM, "...")。

现在,您不太可能希望$WebAppRoot/Moo/WEB-INF/courses.dtd的实际路径作为SYSTEM参考。它不是一个URL,比如http://www.example.com/some/dir/courses.dtd吗?当然,DTD应该可以从该URL获得。无法通过HTTP访问WEB-INF中的内容,至少不能通过Servlet容器访问。

另一方面,如果您希望仅在构建文档的服务器上使文档和DTD可用,则按照Nulldevice的建议继续操作,并在注释中添加警告。

答案 2 :(得分:0)

Transformer提供URIResolver