我是一名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 - 仅供参考,我的应用程序有点过期,对某些代码和结构进行了大修。
再次感谢您的帮助。
答案 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()