在部署时,Grails文件对本地运行的应用程序可见/丢失

时间:2012-11-14 14:25:18

标签: file tomcat grails directory war

我在web-app中有一个名为'templates'的文件夹。当我在当地'战争'时,这很有效:

new File('web-app/templates/').list()

我可以列出我文件夹中的文件。但是,当我将war文件部署到远程tomcat时,列表为空。我是否必须明确告诉grails将文件夹复制到war文件中?

2 个答案:

答案 0 :(得分:3)

也许您正在寻找以下内容:

def baseFolder = grailsAttributes.getApplicationContext().getResource("/").getFile().toString()

def dirList= new File(baseFolder + "/templates").list()

在为tomcat部署WAR时,这对我有用。在我的例子中,baseFolder是我的应用程序中web-app目录的绝对路径。

请参阅http://googolflex.com/?p=664

答案 1 :(得分:0)

您的代码高度依赖war文件被“爆炸”(它可能在Tomcat中,也可能不在Tomcat中,具体取决于配置),以及容器设置为应用程序的“当前目录”。

IIRC,Java EE规范说文件系统中唯一可以安全访问的地方是System.getProperty(“java.io.tmpdir”)标识的临时目录。

当然,许多应用程序都不这样做,但它是非标准的,因此很脆弱。

最安全的做法是将模板目录放在类路径中(即war文件中WEB-INF / classes目录下树中的某个位置),然后通过ClassLoader及其findResource和getResource方法访问它们