servletContext.getRealPath("/") 在控制器中启动应用程序时抛出错误

servletContext.getRealPath("/") throws an error on app startup in controller

我想定义一个绝对的应用程序目录变量,它可以从定义它的控制器中的每个动作访问(通常它会在 class 构造函数中完成)。我只想在控制器范围内定义一次。我尝试使用 beforeInterceptor:

class FileResourceController {

    def uploadPath = ""

    def beforeInterceptor = {
        uploadPath = request.getSession().getServletContext().getRealPath("/") + "uploads" 
    }
}

但 uploadPath 最终为空。

只需这样做:

class FileResourceController {

    def uploadPath = request.getSession().getServletContext().getRealPath("/") + "uploads"
}

在应用程序启动时引发错误。

def uploadPath = request.getSession().getServletContext().getRealPath("/") + "uploads" 放入操作方法中效果很好。

如何在 Grails 中定义控制器作用域可访问的绝对路径变量?

非常感谢,

你可以在那里做 Holders.getServletContext() 而不是 request.getSession().getServletContext()

此外,控制器中的 'beforeInterceptors' 永远不会被调用,因为 Grails 3 仅支持独立拦截器。