告诉servlet文件位置的正确方法是什么?

时间:2011-07-04 02:27:18

标签: java servlets

我只对web.xml中的位置进行硬编码,但这使得我们需要在部署期间每次都更改web.xml。

我们可以在项目中创建一个文件夹,并告诉servlet查找文件夹及其下面的文件吗?

<context-param>
        <param-name>ipTable</param-name>
        <param-value>E:\Workspace\Eclipse_Workspace\BpsPdfBill\WebContent\WEB-INF\ipTable.txt</param-value>
</context-param>

3 个答案:

答案 0 :(得分:2)

如果您不需要File个对象,则可以使用ServletContext.getResource(String path)path参数必须以'/'开头,并且与上下文根相关。该方法返回URL,您可以打开它,然后读取文件的内容。

我认为没有一种获取指向File对象的指针的标准方法。你总是可以使用系统属性,但这可能不比把它放在web.xml中好。

<强>更新

如果你真的需要一个File对象,而不仅仅是文件的内容,那么你可以做一些事情。这取决于文件位置的变化方式。

如果文件位置根据您要部署的服务器而更改,但在每台服务器上保持不变,则只需将系统属性添加到Web容器的启动脚本中。当然,你如何做到这一点因容器而异,但你应该能够在文档中找到它。

您还可以将文件的位置放在单独的属性文件中,例如file.properties,然后修改部署过程以生成或更新此文件并将其放在WEB-INF目录中。然后,您可以使用ServletContext.getResourceAsStream()读取此属性文件,获取路径并实例化File

答案 1 :(得分:0)

尝试getServletContext().getResourceAsStream(filename)

答案 2 :(得分:0)

我必须能够从servlet中获取文件的OS路径,这有两个原因。如果你的目标与我的目标一致,那么这可能就是答案。

  1. 服务器外部的其他一些进程需要读取/写入以与我的Web应用程序共享该文件,并且该文件不应该通过服务器的URL访问。
  2. 我需要动态地将图表生成到服务器URL可访问的临时位置。
  3. 为了实现这一点,我将文件放在已知URL下的战争目录中。我们说URL是/data/asdf.txt。我甚至可以将它存储为web.xml参数。然后我用

    的ServletContext.getRealPath(/data/asdf.txt)

    获取操作系统路径。即使我在web.xml中对param进行硬编码,文件的路径也随着部署而移动。

    要从URL访问中隐藏文件夹,我在Tomcat中使用“〜”作为文件夹的前缀。我认为这个角色是“〜”,不记得了。你需要尝试一下。使用该字符作为前缀,服务器无法使用该URL提供内容。当我挖掘过去的代码以找出前缀时,我可能会回来更新答案。

    当然,隐藏文件夹的另一种方法是将其放在WEB-INF中。