2011-07-04 32 views
1

我只在web.xml中对位置进行硬编码,但它使我们需要在部署期间每次更改web.xml。什么是告诉servlet文件位置的正确方法?

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

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

您不能使用Java资源来代替(将文本文件放在下一个或放在类旁边的子目录中)。这会比WebContent文件夹中的文件更有意义... –

+0

您可以详细说明吗?我对java来说太新了。谢谢。 – lamwaiman1988

+0

相关:http://stackoverflow.com/questions/6097814/how-to-know-the-path-of-the-webcontainer-using-java – BalusC

回答

2

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

我不认为有一个获取指向File对象的指针的标准方法。您始终可以使用系统属性,但这可能不会比将其放入web.xml更好。

UPDATE

如果你真的需要一个File对象,而不仅仅是文件的内容,有一对夫妇的事情可以做。这取决于文件位置如何更改。

如果基于要部署到服务器上的文件位置的变化,但它停留在每个服务器上是相同的,不只是一个系统属性添加到您的Web容器的启动脚本。当然,你如何做到这一点,因容器而异,但你应该能够找到文档中的内容。

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

+0

我需要一个文件对象。 – lamwaiman1988

+0

为什么你需要一个'文件'?你需要什么?获得它的'InputStream'?然后只需使用'ServletContext#getResourceAsStream()'方法。 – BalusC

0

尝试getServletContext().getResourceAsStream(filename)

0

有两个原因,我必须能够从我的servlet文件的操作系统路径。如果你的目标与我的一致,这可能是答案。

  1. 服务器外的其他一些进程需要读/写来与我的web应用程序共享该文件,并且该文件不应该通过服务器的url访问。
  2. 我需要动态生成一个图表到一个临时的位置可以通过服务器的url访问。

为了实现这个目标,我把文件放在战争目录下的一个已知的URL下。假设URL是/data/asdf.txt。我甚至可以将其存储为web.xml参数。然后我用

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

获得OS路径。即使我在web.xml中对param进行了硬编码,文件的路径也随着部署而移动。

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

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

相关问题