我需要从servlet访问服务器上的一些文件。它们在我的开发机器和部署服务器上有不同的路径。我想把一些配置文件(带路径)放在某处(比如shared
dir在capistrano部署中),所以应用程序可以读取它。或者可以在应用程序服务器上设置一些属性或类似的东西。我可以使用Tomcat,Jetty或Glassfish。
目前我在WEB-INF中创建了一个配置文件,配置为本地机器。在服务器上复制.war的部署脚本,通过将服务器配置文件放入其中来修改war文件。它工作,但不太好,如果服务器上的路径发生变化,我将不得不更改本地文件并重新部署应用程序。
你能建议更好的解决方案吗?
答案 0 :(得分:2)
SO中有几个类似的问题。 This是我发现的,我记得还有更多。
无论如何,上述答案中的link可能会有所帮助。
您的选项摘要如下:
答案 1 :(得分:1)
执行此操作的常用方法是在servlet容器中配置依赖项,并通过JNDI公开它们。在您的情况下,只使用路径公开String可能就足够了。
JNDI tutorial和Tomcat's JNDI docs可以帮助您入门。如果你使用Spring IOC容器,JNDI也很好地与Spring集成。
答案 2 :(得分:1)
我同意kgiannakakis,但也有一些限制
- 存储属性/ xml配置
在数据库中绝对是一个选项
但如果它是像XML这样的非属性资源,则并不总是可行。
- JNDI查找是性能受损
而你也不能存储xml
- 如果你有多份副本
应用程序部署在同一台服
环境变量不能使用。
- 以上所有都不能用来做
就像是
MyClass.getResourceAsStream()
如果上面的解决方案还可以,那么你可以使用共享库的概念。我不确定它如何与您提到的上述应用服务器一起工作,但下面给出的是Geronimo,WASCE,IBM Websphere的链接。概念是在部署期间为EAR指定其他类路径。
WASCE 2.1.0 http://publib.boulder.ibm.com/wasce/V2.1.0/en/shared-library.html