Grails GSP编译?

7
当您编译Grails WAR时,我理解.groovy代码被编译成字节码类文件,但是我不知道容器(比如Tomcat)如何在请求GSP时知道如何编译它们。容器是否了解GSP? Grails安装在服务器上是否与容器连接?此外,当第一次使用GSP时,它会按需编译,仅编译一次。这正确吗?谢谢。

据我所知,GSP已经预编译。如果您提取WAR文件,您可以自行确认这一点。 - Gregg
3个回答

12

容器能够理解GSP吗?

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

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

容器在运行时不需要做任何事情,因为所有东西都是预编译好的。

grails安装在服务器上是否会连接到容器?

不会;应用程序运行所需的所有内容都包含在war中,因此在容器服务器上安装grails没有任何影响。


3

好的,我在邮件列表上找到了以下内容:

自从Grails 1.2版开始,在生成WAR文件时,GSP文件将被预编译。


1

GSP(Groovy Server Pages)类似于JSP(Java Server Pages),它们最终都是Servlet。

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

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

Vincent。


6
实际上,如果您反编译一个GSP类,您会看到它扩展了 org.codehaus.groovy.grails.web.pages.GroovyPage,而该类又扩展了 groovy.lang.Script。它们不是servlet,而是助手类,被Grails servlet间接调用以呈现视图。 - Burt Beckwith
谢谢,我不知道。.data文件用于相同的目的吗? - Vincent Giguère
1
每个GSP都有两个.data文件,一个包含静态HTML部分,另一个包含行号信息,以帮助调试器显示原始源代码行。 - Burt Beckwith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接