0

我在 web-app/ 中有一个名为“模板”的文件夹。当我在本地“进行战争”时,效果很好:

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

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

4

2 回答 2

3

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

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

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

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

http://googolflex.com/?p=664

于 2012-11-14T15:38:20.103 回答
0

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

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

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

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

于 2012-11-14T14:55:54.397 回答