2010-11-27 41 views
8

Je souhaite utiliser les vues GSP au lieu des vues JSP/JSTL dans une application Spring MVC ordinaire. J'ai ajouté un groovy.servlet.TemplateServlet à web.xml comme ceci:Utilisation des vues GSP dans Spring MVC sans Grails

<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> 

et la configuration d'un printemps InternalResourceViewResolver pour charger les fichiers GPS. Jusqu'à ce point tout fonctionne bien, mais pour exposer les valeurs dans le modèle au modèle, j'ai dû faire quelques trucs (sous-classement TemplateServlet et les ajouter à la ServletBinding). Maintenant, mon prochain obstacle est que JSTL par défaut échappe XML lors de l'utilisation de la balise c: out et Grails a la notion de codecs pour échapper automatiquement les valeurs utilisées dans un GSP. La méthode modèle décrite ci-dessus n'échappe pas par défaut, ce qui oblige les développeurs à faire très attention à éviter les vulnérabilités XSS. Y a-t-il une autre (meilleure) façon d'utiliser le GSP, y compris l'échappement automatique dans une application Spring MVC ordinaire sans utiliser Grails?

+0

Je travaille sur une tâche identique. Je voudrais utiliser des modèles GSP au lieu de JSP/JSTL. Quelles dépendances dois-je ajouter à mon fichier de construction gradle? –

Répondre

0

Au lieu d'utiliser un TemplateServlet, vous pourriez aussi avoir utilisé un GroovyPagesServlet à cet effet (je ne l'ai pas testé que, juste regardé Grails' web.xml et la classe code).
Ce dernier nécessite la configuration d'un haricot Spring, nommé groovyPagesTemplateEngine, et tapé GroovyPagesTemplateEngine (GStringTemplateEngine dans ce cas).

La configuration du calque d'affichage avec InternalResourceViewResolver est correcte. Vous avez attribué un GroovyPageView.

Les GSP, par défaut, sont et non configurés pour effectuer l'échappement HTML. Pour configurer cela, remplacez grails.views.default.codec par none par html dans Config.groovy. Voir this article pour plus d'informations.

+1

J'ai choisi TemplateServlet parce que cela fait partie de Groovy lui-même, le GroovyPagesServlet semble être une partie de Grails? Il en va de même pour GroovyPageView, il nécessite la mise en place de filtres Grails. Une de mes exigences est de ne pas inclure Grails, donc je suis à la recherche de la solution la plus maigre pour inclure le support GSP – Tomas

+1

La prochaine fois, s'il vous plaît exprimer vos besoins dans la question originale (et non dans un commentaire ultérieur). Cela nous épargnera beaucoup d'efforts. - Merci. - Après tout, vous avez trouvé * votre * solution (qui semble fonctionner correctement), à l'exception de se tromper sur votre point le plus central de l'échappement HTML GSP. - Cela a été abordé dans ma réponse aussi. - Merci encore. – robbbert

+1

Désolé.- Dans votre question initiale, vous avez mentionné (dans le titre de la question) "sans Grails", et je ne l'avais pas reconnu. - Cependant, votre question restante sur l'échappement HTML de GSP devrait maintenant avoir été résolue. – robbbert

0

Nous avons extrait le GSP de Grails, l'avons personnalisé pour les applications Spring MVC et amélioré la configuration. S'il vous plaît voir notre outil Rabbtor. Nous ne fournissons pas l'open source, mais l'utilisation est gratuite et nous l'utilisons dans nos propres applications. GSP pour Spring Boot dépend du démarrage de Spring, il n'est pas maintenu et certaines bibliothèques de balises dépendent de Grails. Nous avons supprimé ces dépendances, créé nos propres bibliothèques de balises personnalisées qui conviennent mieux aux applications Spring MVC.La plupart des bibliothèques de balises sont prises en charge et ont des implémentations similaires aux balises JSP Spring.Une bibliothèque de balises de données est fournie et vous pouvez également enregistrer vos bibliothèques de balises ou paquets.