我在web-app中有一个名为'templates'的文件夹。当我在当地'战争'时,这很有效:
new File('web-app/templates/').list()
我可以列出我文件夹中的文件。但是,当我将war文件部署到远程tomcat时,列表为空。我是否必须明确告诉grails将文件夹复制到war文件中?
答案 0 :(得分:3)
也许您正在寻找以下内容:
def baseFolder = grailsAttributes.getApplicationContext().getResource("/").getFile().toString()
def dirList= new File(baseFolder + "/templates").list()
在为tomcat部署WAR时,这对我有用。在我的例子中,baseFolder是我的应用程序中web-app目录的绝对路径。
答案 1 :(得分:0)
您的代码高度依赖war文件被“爆炸”(它可能在Tomcat中,也可能不在Tomcat中,具体取决于配置),以及容器设置为应用程序的“当前目录”。
IIRC,Java EE规范说文件系统中唯一可以安全访问的地方是System.getProperty(“java.io.tmpdir”)标识的临时目录。
当然,许多应用程序都不这样做,但它是非标准的,因此很脆弱。
最安全的做法是将模板目录放在类路径中(即war文件中WEB-INF / classes目录下树中的某个位置),然后通过ClassLoader及其findResource和getResource方法访问它们