在没有Grails的普通Spring MVC中使用GSP视图

我想在一个普通的Spring MVC应用程序中使用GSP视图而不是JSP / JSTL视图。 我已经将groovy.servlet.TemplateServlet添加到web.xml,如下所示:

 GroovyTemplate groovy.servlet.TemplateServlet  template.engine groovy.text.GStringTemplateEngine    GroovyTemplate *.gsp  

并设置Spring InternalResourceViewResolver来加载GPS文件。 到目前为止一切正常,但是为了将模型中的值暴露给模板,我必须做一些技巧(inheritanceTemplateServlet并将它们添加到ServletBinding中)。

现在我的下一个障碍是默认情况下JSTL在使用c:out标记时转义XML,而Grails具有编解码器的概念来自动转义GSP中使用的值。 默认情况下,上述模板方法不会转义,这需要开发人员非常小心地避免XSS漏洞。

是否有另一种(更好的)使用GSP的方法,包括在不使用Grails的普通Spring MVC应用程序中自动转义?

今天GSP for Spring Boot刚刚发布。 这提供了在常规Spring Web应用程序中使用GSP而不是JSP的能力。 你可以在这里看到一个例子: https : //github.com/grails/grails-boot/blob/master/sample-apps/gsp/script/templates/index.gsp

您可以使用GroovyPagesServlet而不是使用TemplateServlet (我没有测试过,只是查看了Grails的web.xml和类的代码)。
后者需要设置一个Spring bean,命名为groovyPagesTemplateEngine ,并输入GroovyPagesTemplateEngine (在本例中为groovyPagesTemplateEngine )。

使用InternalResourceViewResolver配置视图层是正确的。 您将分配一个GroovyPageView

默认情况下,GSP 配置为执行HTML输出转义。 要配置它,请在Config.groovy grails.views.default.codecnone更改为html 。 有关更多信息,请参阅此文章 。

我们从Grails中提取了GSP,为Spring MVC应用程序定制了它并改进了配置支持。 请参阅我们的工具Rabbtor 。 我们不提供开源,但使用是免费的,我们一直在自己的应用程序中使用它。 Spring Boot的GSP依赖于Spring启动,它不会被维护,一些标签库依赖于Grails。 我们删除了这些依赖项,创建了自己的自定义标记库,更适合Spring MVC app。支持大多数标记库,并且具有与Spring JSP标记类似的实现。提供了数据绑定表单标记库,您也可以注册标记库或包。