为什么我的网络应用程序在tomcat / bin中而不是在webapps中查找所需文件?

时间:2014-03-12 16:10:01

标签: java tomcat servlets tomcat6

我正在研究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中查看?

2 个答案:

答案 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("/")