我正在研究Oryx Editor的分支。在oryxRoot\editor\server\src\org\oryxeditor\server
中,我添加了一个Java servlet,在其中我尝试将XSL文件应用于表示XML文档的流。代码如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//get AppML from POST
InputStream inputStream = new ByteArrayInputStream(request.getParameter("content").getBytes("UTF-8"));
inputStream.reset();
try {
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource("lib/SorinCode.xsl"));
transformer.transform(new StreamSource(inputStream), new StreamResult(new FileOutputStream("output.txt")));
System.out.println("************* The result is in output.txt *************");
} catch (Throwable t) {
t.printStackTrace();
}
}
问题是new StreamSource("lib/SorinCode.xsl")
期望在tomcat/bin/lib
中找到XSL文件,而不是像我期望的那样在tomcat/webapp/oryx/lib
中找到。我试图改变
oryxRoot/editor/etc/context.xml
并添加baseDoc="oryx"
,但这没有帮助。
有人可以告诉我为什么应用程序在bin
文件夹中查找XSL文件,我该怎么做才能让它在webapps/oryx
中查看?
答案 0 :(得分:4)
使用InputStream
的{{1}}构造函数:
StreamSource
...如果...new StreamSource(request.getServletContext().getResourceAsStream("lib/SorinCode.xsl"))
在网络内容中。如果它在类路径中,请改为使用:
lib/SorinCode.xsl
答案 1 :(得分:1)
cwd(当前工作目录)通常基于启动程序的路径。也就是Tomcat程序,而不是你的webapp。 cwd可能非常不可预测。它可能只是bin目录,因为当你启动Tomcat时你的shell就在那个目录中。
要获取部署Web应用程序的路径,请使用request.getServletContext().getRealPath("/")
。