从servlet访问WebContent文件夹中的文件

8
我正在尝试使用FOP生成PDF文档。 PDF生成代码位于servlet中,xsl位于WebContent文件夹中的特定文件夹中。
如何通过相对路径访问此xsl文件?仅在File对象中提供完整路径时才有效。
我需要动态生成xml内容。如何将此动态生成的XML作为源,而不是作为File对象提供?
请提供您的建议。
3个回答

19

要获取路径,你可以直接执行以下操作:

String path = s.getServletContext().getRealPath("/WEB-INF/somedir/hdfeeh");         

s是实现HTTPServlet的类。如果它是你的servlet类,你也可以使用this.getServletContext()

然后将此作为参数传递。

至于使用动态生成的XML,你正在使用的库应支持使用输入流,编写XML,将其转换为字节数组,然后将其包装在ByteArrayInputStream中并使用它。


4
我不太明白。我不知道s是什么? - newbie
2
@newbie s 是一个实现了 ServletConfig 接口的对象。HttpServlet 继承了一个实现了 ServletConfig 的类。这意味着如果你的类继承了 HttpServlet,你可以使用 this.getServletContext() - Austin Moore
它对我不起作用。如果我使用这样的路径检查文件是否存在,它会返回false。请看一下我的问题:http://stackoverflow.com/questions/36598562/unable-to-access-file-in-web-inf-folder-from-servlet - Thang Do

6

如果您需要一个直接且独立的容器实现,您可以在Servlet内使用以下方法getResource()访问资源:

/开始Servlet/

public InputStream getResource(String resourcePath) {
  ServletContext servletContext = getServletContext();
  InputStream openStream = servletContext.getResourceAsStream( resourcePath );
  return openStream;
}

public void testConsume() {
  String path = "WEB-INF/teste.log";
  InputStream openStream = getResource( path );

  int c = -1;
  byte[] bb = new byte[1024];
  while ( -1 != ( c = openStream.read( bb ) ) ) {
    /* consume stream */
  }
  openStream.close();
}

/结束servlet/


很遗憾,我无法将资源加载到流中。我得到了异常java.net.MalformedURLException我打印了servletContext,它显示为com.ibm.ws.webcontainer.facade.ServletContextFacade@36c29971有什么想法吗? - jobinbasani
1
使用servletContext.getRealPath(filePath)后,它正常工作了 :) - jobinbasani
这里,代码运行良好。 我正在使用Tomcat 6.*。 现在我看到你正在使用IBM平台。也许,这就是结果差异的原因。 - Andre Pastore

1
我使用以下方法在Web内容下读取文件。
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getSession().getServletContext().getResourceAsStream("/json/sampleJson.json")));

现在所有文件内容都可以在读取器对象中获得。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接