【问题标题】:Grails files visible to app running locally / missing when deployed?Grails 文件对本地运行的应用程序可见/部署时丢失?
【发布时间】:2012-11-14 14:25:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: file tomcat grails directory war


    【解决方案1】:

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

    def baseFolder = grailsAttributes.getApplicationContext().getResource("/").getFile().toString()
    
    def dirList= new File(baseFolder + "/templates").list()
    

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

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

    【讨论】:

    • 这适用于控制器,但 grailsAttributes 在我在 BootStrap 期间运行的服务中是“没有这样的属性”。如何在 BootStrap 和服务中找到路径?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 2021-03-14
      相关资源
      最近更新 更多