Groovy GSP charset problem resolving

Sep 27, 2011 17:28


В какой-то момент проявилась одна заметная проблема, мешающая мне осуществить абсолютно 100% замену PHP на Groovy для веба без использования относительно тяжеловесного MVC-фреймворка Grails.

Это касается *.gsp страниц (Groovy Server Pages), представляющих собой html-страницы со вставками вида <% .. %> с произвольным кодом на Groovy или Java, или на языке оригинала: «GSP means GroovyServer Pages, which is similar to JSP (JavaServer Pages).»

Точно такая же функциональность в PHP реализуется вставками (причем для PHP наличие такого блока является обязательным, даже если он реализует классы или бизнес-логику; если после такого блока будет находиться обычно невидимый пробел или перенос строки, то он попадёт в вывод, что может привести к проблемам).

На сайте груви написано: «GSP are not maintained as a standalone module. But it has been forked and reintegrated in Grails.» Но, тем не менее, как и груви-сервлеты, gsp-страницы работают без Grails, достаточно просто подключить груви к приложению.

Проблема заключалась в том, что в этих gsp-страницах русский текст превращался в «кракозябры». В груви-сервлетах, как в «настоящих», так и скриптового вида, такого не наблюдалось.

Методом научного тыка выяснилось, что если исходник gsp перевести в кодировку по-умолчанию на системе (например, cp1251 для Windows), то проблема решается (при этом вывод страницы идет уже в кодировке UTF-8).

А это чистой воды подсказка: идем в исходники сервлета groovy.servlet.TemplateServlet.java, который отвечает за разбор таких страниц, и находим там строку:



private static final String GROOVY_SOURCE_ENCODING = "groovy.source.encoding";
Там же видно, как этот параметр влияет на создание экземпляра Reader-а.

Прописываем в web.xml приложения параметр сервлету со значением «UTF-8″, и вуаля, - проблема решена.

Полный текст web.xml приложения, в котором все произвольные *.groovy и *.gsp файлы будут компилироваться в сервлеты и корректно выводить кириллицу:

GroovyServlet groovy.servlet.GroovyServlet GroovyServlet *.groovy *.grv GSP groovy.servlet.TemplateServlet
groovy.source.encoding
UTF-8 GSP *.gsp
Здесь так же показано, как длинное расширение .groovy, которое будет «светиться» в url-адресах можно заменить произвольным коротким, например .grv (или .php - just 4 fun).

Теперь можно быстро и просто писать сайты, веб-приложения, фреймворки на Groovy, для чего понадобятся только установленные Java и Tomcat на сервере.

[ Original at blekel.ru ]

rtfm

Previous post Next post
Up