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

job*_*ani 8 java servlets apache-fop

我正在尝试使用FOP生成PDF文档.pdf生成代码保存在servlet中,xsl位于WebContent文件夹中的特定文件夹中.

如何通过提供相对路径来访问此xsl文件?它仅在我在File对象中提供完整路径时才有效.

我需要动态生成xml内容.如何将此动态生成的xml作为源而不是File对象?

请提供您的建议.

GBa*_*GBa 17

要获得您可以做的路径:

String path = s.getServletContext().getRealPath("/WEB-INF/somedir/hdfeeh");         
Run Code Online (Sandbox Code Playgroud)

s是实现的类HTTPServlet.您也可以使用this.getServletContext()它的servlet类.

然后将其作为参数传递.

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

  • 不太明白.我不知道什么是`s`? (4认同)
  • @newbie` s`是一个实现[`ServletConfig`]的对象(http://docs.oracle.com/javaee/5/api/javax/servlet/ServletConfig.html).`HttpServlet`扩展了一个实现`ServletConfig`的类.这意味着如果你的类扩展了`HttpServlet`,你可以做`this.getServletContext()`. (2认同)

And*_*ore 6

对于直接和独立的容器实现,您可以使用servlet中的以下方法getResource()访问资源:

/ start 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();
}
Run Code Online (Sandbox Code Playgroud)

/ end servlet /