【问题标题】:Grails GSP Compilation?Grails GSP 编译?
【发布时间】:2011-07-20 14:09:19
【问题描述】:

当您编译 grails 战争时,我知道 .groovy 代码被编译为字节码类文件,但我不明白容器(例如,tomcat)如何知道如何在请求 GSP 时编译它们.容器了解 GSP 吗? grails 安装在服务器上的事实是否与容器挂钩?

此外,第一次使用 GSP 时,它会按需编译,并且只编译一次。它是否正确?谢谢。

【问题讨论】:

  • 据我所知,GSP 已经预编译。如果您提取 WAR 文件,您可以自己确认。

标签: grails compilation gsp


【解决方案1】:

容器了解 GSP 吗?

GSP 实际上是在构建 war 时编译为类文件,而不是在运行时由 tomcat 编译 - 如果您解压缩 war 文件,您可以查看它的作用(查看解压缩的 WEB-INF/classes 目录) :

...
gsp_appname_controllerNameviewName_gsp.class
gsp_appname_controllerNameanotherViewName_gsp.class
...

容器在运行时不需要做任何事情,因为一切都是预编译的。

grails 安装在服务器上的事实是否与容器挂钩?

它没有;应用程序运行所需的一切都包含在 war 中,因此将 grails 安装在容器的服务器上没有任何区别。

【讨论】:

    【解决方案2】:

    好的,所以刚刚在邮件列表中找到了这个:

    从 grails 1.2 开始,gsps 是在生成 war 文件时预编译的。

    【讨论】:

      【解决方案3】:

      GSP 类似于 JSP,它们最终都是 servlet。

      因此,当您构建 .war 文件时,您的 GSP 将被预编译为 servlet 并包含在您的 WEB-INF/classes .war 文件夹中。 (它们以 gsp_controlleraction_**.class 开头)

      所以,不,Tomcat 不知道如何编译 GSP,但它可以执行 servlet。

      文森特。

      【讨论】:

      • 实际上,如果你反编译一个 GSP 类,你会看到它扩展了 org.codehaus.groovy.grails.web.pages.GroovyPage,它扩展了 groovy.lang.Script。它们不是 servlet,而是由 Grails servlet 间接调用以呈现视图的辅助类。
      • 谢谢,我不知道。 .data 文件是否用于相同目的?
      • 每个 GSP 有两个 .data 文件,一个包含静态 HTML 部分,一个包含行号信息以帮助调试器显示原始源代码行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2021-07-02
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多