目次

Groovy
|- Groovyとは
|- 魅力
|- 感想
|- GSP
|- SwingBuilder

Groovy便利帖
|- 文字列操作
|- ファイル操作
|- リンク集

トップページ > Groovyとは > GSP (Groovy Server Pages)
更新日付 2005/12/1

Groovyを使って、JSPと同じような動作をさせるための仕組み

クライアント側のソフト開発を行っているので、まったく必要ないが、面白そうなので試してみた..がしかし、設定〜日本語の使用などさまざまな点で苦しんだ。

社内イントラネット用の掲示板をGSPで作った。一応活躍している。


■仕様変更?

WEB上に出回っている説明が最新版(JSR2、2005/07時点)では動かず苦しんだ。GSPはどうやら以前とクラス構造が変わったような気配。

前:groovy.modules.pages.GroovyPages

後:groovy.servlet.TemplateServlet


その関係で web.xml の記述方法も変わった模様。

以前?
<servlet>  
<servlet-name>GSP</servlet-name>  
<servlet-class>groovy.modules.pages.GroovyPages</servlet-class>  
<init-param>  
<param-name>encoding</param-name>  
<param-value>ISO-8859-1</param-value>  
</init-param>  
<init-param>  
<param-name>debug</param-name>  
<param-value>0</param-value>  
</init-param>  
</servlet> 
<servlet-mapping>  
<servlet-name>GSP</servlet-name>  
<url-pattern>*.gsp</url-pattern>  
</servlet-mapping>  
最近
(2005/07)
<servlet>  
<servlet-name>GroovyTemplate</servlet-name>  
<servlet-class>groovy.servlet.TemplateServlet</servlet-class> 
</servlet>  

<servlet-mapping>  
<servlet-name>GroovyTemplate</servlet-name>  
<url-pattern>*.gsp</url-pattern>  
</servlet-mapping>  



■日本語表記もうまくいかず(涙)

JSR2(2005/7/1)の段階では日本語を文字化けせずにきちんと表示させる方法がわからず非常に苦労した。

いろいろ試し ( エンコードを組み合わせたり、<init-param>をつけたり、JSPと同じような記述を試したり) 結局うまくいかず、数値文字参照?( &#01234;とかいう文字表現 )を使う以外に、日本語を使用する方法が不明。

数値文字参照に何を使って変換したらよいのかわからないので、変換ツールも自作。ツール作成は意外に簡単なのでホッとしたが、いちいちバッチを走らせて変換しているので結構面倒。



何か設定簡単な方法を見逃しているのか、それとも現在のバージョンのせいなのかは不明。いずれにしてもドキュメントが少なすぎるのが非常につらい。時が解決してくれることを祈ってますが...

■日本語をうまく行かせたった

2005/7/20の時点でCVSから最新版らしきものをとってきて、JARに固めなおして、GSPとして動かしたが、やはり日本語はダメ状態 (動作の安定度はJSR2よりだいぶマシになっていたが)。

こんにゃろ、と思ってTemplateServletクラスをチェックすると、いかにもAscii以外の文字には対応していないことが判明。ちょっと試行錯誤したら、なんとか日本語が出た!!やればできるもんだ。

修正箇所は2箇所 (いずれもTemplateServletクラス内)

とりあえずUTF-8で行くことに。




protected Template getTemplate(File file) throws ServletException {

....(略)

FileReader reader = null;
try {
reader = new FileReader(file);//これじゃ日本語は無理だわ




protected Template getTemplate(File file) throws ServletException {

....(略)

Reader reader = null;//FileReaderではなくなった
try {
//面倒なのでUTF-8で決め打ちに
reader = new InputStreamReader(new FileInputStream(file) , "UTF-8") ;




ServletBinding binding = new ServletBinding(request, response, servletContext);
setVariables(binding);



ServletBinding binding = new ServletBinding(request, 
response, servletContext);
setVariables(binding); //これでばっちり?
response.setContentType("text/html;charset=UTF-8") ;


これで、とりあえずはばっちり日本語は表示される。UTF-8決め打ちで適当にお茶を濁しているが、どうせ正式リリースされる時には解決しているだろうから、まあよろしかろう。

早く正式に対応してほしいもんだ。もしかするとGroovyの開発グループの中に、2バイト文字を使う人材は一人もいないのか?


---
あと直接関係ないが、 org..codehaus.groovy.antlr.parserパッケージの中身がCVSから取ってこれなくて、よくわからないから、jsr2のjarファイルから、ここだけコピーして使っておいた。これまた邪道か。


■文字化けの問題が、もう一個あった。07/21(AM 3:30)

フォームからの送信データが文字化けする問題が発生。JSPのようにスクリプト中で
request.setCharacterEncoding("UTF-8") ;というように指定しても、解決する気配なし。

再び、Groovyのソースコードを拝見して、TemplateServletクラスの以下の場所をいじるとなんとか日本語に。



public void service(HttpServletRequest request, .............){



public void service(HttpServletRequest request, .............){
request.setCharacterEncoding("UTF-8") ;

ちなみにservice( )メソッドの中盤で

request.setCharacterEncoding("UTF-8") ;

をはさんでも文字化けは解決しないようです。