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

时间:2010-11-27 01:44:00

标签: java spring spring-mvc groovy gsp

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

<servlet>
    <servlet-name>GroovyTemplate</servlet-name>
    <servlet-class>groovy.servlet.TemplateServlet</servlet-class>
    <init-param>
            <param-name>template.engine</param-name>
            <param-value>groovy.text.GStringTemplateEngine</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>GroovyTemplate</servlet-name>
    <url-pattern>*.gsp</url-pattern>
</servlet-mapping>

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

除了使用TemplateServlet之外,您还可以使用GroovyPagesServlet来实现此目的(我没有测试过,只看了Grails的 web.xml 和班级的代码 后者需要设置一个Spring bean,名为groovyPagesTemplateEngine,并键入GroovyPagesTemplateEngine(在这种情况下为GStringTemplateEngine)。

使用InternalResourceViewResolver配置视图层是正确的。您已经分配了GroovyPageView

默认情况下,GSP 配置为执行HTML输出转义。要进行配置,请在 Config.groovy 中将grails.views.default.codecnone更改为html。有关详细信息,请参阅this article

答案 2 :(得分:0)

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