我只对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>
答案 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路径,这有两个原因。如果你的目标与我的目标一致,那么这可能就是答案。
为了实现这一点,我将文件放在已知URL下的战争目录中。我们说URL是/data/asdf.txt。我甚至可以将它存储为web.xml参数。然后我用
的ServletContext.getRealPath(/data/asdf.txt)
获取操作系统路径。即使我在web.xml中对param进行硬编码,文件的路径也随着部署而移动。
要从URL访问中隐藏文件夹,我在Tomcat中使用“〜”作为文件夹的前缀。我认为这个角色是“〜”,不记得了。你需要尝试一下。使用该字符作为前缀,服务器无法使用该URL提供内容。当我挖掘过去的代码以找出前缀时,我可能会回来更新答案。
当然,隐藏文件夹的另一种方法是将其放在WEB-INF中。