0

我是一名 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——但是他们的项目已经过时了,我很难找到文档或帮助。因此,任何解决方案的想法或方向都将不胜感激。

如果有人有兴趣查看我所做的作为参考,这里是我在 GitHub 上的代码存储库——仅供参考,我的应用程序有点过期,需要对代码和结构进行一些大修。

再次感谢任何帮助。

4

1 回答 1

0

Grails ( https://grails.org ) 框架允许这种模板以及许多其他东西)。它本质上是Ruby on Rails的Groovy等价物(因此名称相似——它曾经被称为Groovy on Grails)。

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

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 文档中的示例:

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()
于 2014-07-17T01:40:23.803 回答