当你编译grails战争时,我知道.groovy代码被编译成字节码类文件,但我不明白容器(比如tomcat)如何在请求时编译GSP。容器是否理解GSP?服务器上安装grails的事实是否挂钩到容器中?Grails GSP编译?
此外,当第一次使用GSP时,它是按需编译并且只有一次。它是否正确?谢谢。
当你编译grails战争时,我知道.groovy代码被编译成字节码类文件,但我不明白容器(比如tomcat)如何在请求时编译GSP。容器是否理解GSP?服务器上安装grails的事实是否挂钩到容器中?Grails GSP编译?
此外,当第一次使用GSP时,它是按需编译并且只有一次。它是否正确?谢谢。
容器是否理解GSP?
的GSP的实际被编译成class文件,当战争而建,而不是在被Tomcat运行 - 如果你解压缩war文件,你可以看看它(看解压后的WEB-INF是什么/ classes目录):
...
gsp_appname_controllerNameviewName_gsp.class
gsp_appname_controllerNameanotherViewName_gsp.class
...
容器不需要在运行时做任何事情,因为一切都是预编译的。
grails是否安装在服务器挂钩到容器的事实?
它不;战争中包含了应用程序运行所需的所有内容,因此安装在容器服务器上的grails没有任何区别。
好了,刚刚发现这个邮件列表上:
因为Grails的1.2生成WAR文件时GSPS是预编译。
GSPs就像JSP一样,它们最终是servlet。
因此,当您构建.war文件时,您的GSP将被预编译为servlet并包含在您的WEB-INF/classes .war文件夹中。 (他们从gsp_controlleraction _ **。class开始)
因此,不,Tomcat不知道如何编译GSP,但它可以执行servlet。 Vincent。
Vincent。
实际上,如果你反编译一个GSP类,你会发现它扩展了'org.codehaus.groovy.grails.web.pages.GroovyPage',它扩展了'groovy.lang.Script'。它们不是servlet,而是由Grails servlet间接调用的辅助类来呈现视图。 –
谢谢,我不知道。 .data文件是否用于相同的目的? –
每个GSP都有两个.data文件,一个包含静态HTML部分,另一个包含行号信息以帮助调试器显示原始源代码行。 –
据我所知,GSP已经预编译。如果你解压缩WAR文件,你可以自己确认一下。 – Gregg