9

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

<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 应用程序中自动转义?

4

3 回答 3

1

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

于 2014-04-25T19:02:32.433 回答
0

除了使用 a TemplateServlet,您还可以使用 aGroovyPagesServlet来达到这个目的(我没有测试过,只是查看了 Grails 的web.xml和类的代码)。
后者需要设置、命名groovyPagesTemplateEngine和键入Spring bean GroovyPagesTemplateEngineGStringTemplateEngine在本例中)。

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

默认情况下,GSP配置为执行 HTML 输出转义。要配置它,请在Config.groovygrails.views.default.codec中从更改none为。有关更多信息,请参阅本文html

于 2010-11-27T14:37:38.420 回答
0

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

于 2016-06-10T18:56:09.650 回答