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

Tom*_*mas 9 java groovy spring spring-mvc 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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

rob*_*ert 0

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

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

默认情况下,GSP 未配置为执行 HTML 输出转义。要配置它,请在Config.groovygrails.views.default.codec中将其从更改none为。请参阅这篇文章了解更多信息。html