使用Groovy Shell评估包含嵌入代码的文件

时间:2014-07-17 01:30:49

标签: java groovy groovyshell

我是一名Web开发人员,最近从使用PHP转向Java用于Web应用程序。我最终编写了自己的服务器应用程序,可以使用未编译的groovy脚本轻松扩展,我的服务器将通过Groovy Shell评估 - 即。 foo.html.groovy。到目前为止,它创造了奇迹,我为我的结果感到非常自豪......但是......我非常想念PHP脚本中的一件事,我希望在我的应用程序中实现这一点,并且'能够将编程语言代码嵌入文件中。我不仅因为说服而错过它,我也很想念它,因为使用许多print语句来输出html或者类似的,很快就会变得很痛苦,更不用说Groovy在JavaScript代码中表现不佳,除非几乎所有内容逃脱 - 即。 $ " '

PHP:

    <p class="warning"><?php echo($result["error"]); ?></p>

即使Ruby on Rails也提供了类似.erb文件的内容,而且我想象来自Groovy的东西会是这样的:

    <p class="warning"><%= result.error %></p>

我只是好奇是否有人知道这是否已经实施或是否可以模拟?当我第一次开发我的应用程序时,我确实尝试使用正则表达式公式来过滤掉嵌入代码,对其进行评估,然后将其替换回来,但这并非100%完美无瑕,它使调试任何代码错误成为一个噩梦,因为行和列数永远不准确。我也尝试使用Quercus - 它在Java中模拟PHP - 但是他们的项目已经过时了,我很难找到文档或帮助。因此,非常感谢任何解决方案的想法或方向。

如果有人有兴趣看到我做了什么作为参考,here is my code repository at GitHub - 仅供参考,我的应用程序有点过期,对某些代码和结构进行了大修。

再次感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Grails https://grails.org)框架允许这种模板(以及许多其他事情)。它基本上是 Groovy 相当于 Ruby on Rails (因此名称相似性 - 它曾经被称为 Grails上的Groovy )。

这是他们的一个介绍性示例应用程序:

https://github.com/grails-samples/grails-petclinic

它允许您在<table>标记内执行此类操作:

<g:each var="v" in="${visit.pet.visits}">
    <g:if test="${v.id}">
        <tr>
            <td><g:formatDate date="${v.date}" format="yyyy-MM-dd"/></td>
            <td>${v.description}</td>
        </tr>
    </g:if>
</g:each>

根据OP的评论进行编辑:

如果 Grails 太重且与您目前的不同,您可能需要尝试 Groovy模板

这些内置于语言中,比 Grails 重量轻得多,而且更类似于您提到的 PHP 样式和 JSP Scriplets 在另一条评论中提到过。

这是Groovy doc

中的示例
import groovy.text.SimpleTemplateEngine

def text = 'Dear "$firstname $lastname",\nSo nice to meet you in <% print city %>.\nSee you in ${month},\n${signed}'

def binding = ["firstname":"Sam", "lastname":"Pullara", "city":"San Francisco", "month":"December", "signed":"Groovy-Dev"]

def engine = new SimpleTemplateEngine()
template = engine.createTemplate(text).make(binding)

def result = 'Dear "Sam Pullara",\nSo nice to meet you in San Francisco.\nSee you in December,\nGroovy-Dev'

assert result == template.toString()